CMakeLists.txt 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779
  1. set(CMAKE_EXPERIMENTAL_EXPORT_PACKAGE_DEPENDENCIES "1942b4fa-b2c5-4546-9385-83f254070067")
  2. cmake_minimum_required (VERSION 2.7.20090711)
  3. if(POLICY CMP0129)
  4. cmake_policy(SET CMP0129 NEW)
  5. endif()
  6. project(Export C CXX)
  7. find_package(Foo REQUIRED CONFIG NO_DEFAULT_PATH)
  8. # Pretend that RelWithDebInfo should link to debug libraries to test
  9. # the DEBUG_CONFIGURATIONS property.
  10. set_property(GLOBAL PROPERTY DEBUG_CONFIGURATIONS Debug RelWithDebInfo)
  11. add_library(testExe1lib STATIC testExe1lib.c) # not exported
  12. add_executable(testExe1 testExe1.c)
  13. target_link_libraries(testExe1 testExe1lib)
  14. set_property(TARGET testExe1 PROPERTY VERSION 4)
  15. add_library(testExe2libImp SHARED testExe2libImp.c)
  16. set_property(TARGET testExe2libImp PROPERTY LIBRARY_OUTPUT_DIRECTORY impl)
  17. add_library(testExe2lib SHARED testExe2lib.c)
  18. target_link_libraries(testExe2lib testExe2libImp)
  19. set_property(TARGET testExe2lib PROPERTY LINK_INTERFACE_LIBRARIES "")
  20. add_executable(testExe2 testExe2.c)
  21. set_property(TARGET testExe2 PROPERTY ENABLE_EXPORTS 1)
  22. set_property(TARGET testExe2 PROPERTY LINK_INTERFACE_LIBRARIES testExe2lib)
  23. add_library(compileOnly INTERFACE)
  24. target_compile_definitions(compileOnly INTERFACE FROM_compileOnly)
  25. target_link_options(compileOnly INTERFACE -fthis-flag-does-not-exist)
  26. add_library(testLib1 STATIC testLib1.c)
  27. add_library(testLib2 STATIC testLib2.c)
  28. target_link_libraries(testLib2 testLib1)
  29. target_link_libraries(testLib2
  30. PRIVATE
  31. testLib1
  32. "$<COMPILE_ONLY:compileOnly>")
  33. # Test install(FILES) with generator expressions referencing testLib1.
  34. add_custom_command(TARGET testLib1 POST_BUILD
  35. COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:testLib1>
  36. $<TARGET_FILE:testLib1>.genex
  37. )
  38. install(FILES $<TARGET_FILE:testLib1>.genex
  39. DESTINATION $<1:lib>$<0:/wrong>
  40. )
  41. set_property(TARGET testLib1 PROPERTY MY_FILES
  42. ${CMAKE_CURRENT_SOURCE_DIR}/testLib1file1.txt
  43. ${CMAKE_CURRENT_SOURCE_DIR}/testLib1file2.txt
  44. )
  45. install(FILES $<TARGET_PROPERTY:testLib1,MY_FILES>
  46. DESTINATION $<1:doc>$<0:/wrong>
  47. )
  48. # Test library with empty link interface. Link it to an implementation
  49. # dependency that itself links to dependencies publicly.
  50. add_library(testLib3ImpDep SHARED testLib3ImpDep.c)
  51. set_property(TARGET testLib3ImpDep PROPERTY LIBRARY_OUTPUT_DIRECTORY impl/dep)
  52. add_library(testLib3Imp SHARED testLib3Imp.c)
  53. set_property(TARGET testLib3Imp PROPERTY LIBRARY_OUTPUT_DIRECTORY impl)
  54. target_link_libraries(testLib3Imp testLib3ImpDep)
  55. add_library(testLib3 SHARED testLib3.c)
  56. target_link_libraries(testLib3 testLib3Imp)
  57. set_property(TARGET testLib3 PROPERTY LINK_INTERFACE_LIBRARIES "")
  58. set_property(TARGET testLib3 PROPERTY VERSION 1.2)
  59. set_property(TARGET testLib3 PROPERTY SOVERSION 3)
  60. # Test <ARCHIVE|LIBRARY|RUNTIME>_OUTPUT_NAME[_<CONFIG>] properties.
  61. set_property(TARGET testLib3 PROPERTY RUNTIME_OUTPUT_NAME_DEBUG testLib3dll-d)
  62. set_property(TARGET testLib3 PROPERTY RUNTIME_OUTPUT_NAME_RELEASE testLib3dll-r)
  63. set_property(TARGET testLib3 PROPERTY RUNTIME_OUTPUT_NAME testLib3dll)
  64. set_property(TARGET testLib3 PROPERTY LIBRARY_OUTPUT_NAME_DEBUG testLib3lib-d)
  65. set_property(TARGET testLib3 PROPERTY LIBRARY_OUTPUT_NAME_RELEASE testLib3lib-r)
  66. set_property(TARGET testLib3 PROPERTY LIBRARY_OUTPUT_NAME testLib3lib)
  67. set_property(TARGET testLib3 PROPERTY ARCHIVE_OUTPUT_NAME testLib3import)
  68. add_library(testLib4 SHARED testLib4.c)
  69. set_property(TARGET testLib4 PROPERTY FRAMEWORK 1)
  70. add_library(testLib5 SHARED testLib5.c)
  71. add_library(testLib6 STATIC testLib6.cxx testLib6c.c)
  72. add_library(testLibPerConfigDest STATIC testLibPerConfigDest.c)
  73. install(TARGETS testLibPerConfigDest EXPORT exp
  74. DESTINATION lib/$<$<BOOL:$<CONFIG>>:$<CONFIG>>$<$<NOT:$<BOOL:$<CONFIG>>>:NoConfig>
  75. )
  76. # Test OUTPUT_NAME properties with generator expressions
  77. add_library(testLib7 STATIC testLib7.c)
  78. set_property(TARGET testLib7 PROPERTY OUTPUT_NAME_DEBUG testLib7D-$<CONFIG>)
  79. set_property(TARGET testLib7 PROPERTY OUTPUT_NAME_RELEASE testLib7R-$<CONFIG>)
  80. set_property(TARGET testLib7 PROPERTY OUTPUT_NAME testLib7-$<CONFIG>)
  81. # Test exporting OBJECT targets
  82. add_library(testLib8 OBJECT testLib8A.c testLib8B.c sub/testLib8C.c)
  83. if(NOT CMAKE_GENERATOR STREQUAL "Xcode" OR NOT CMAKE_OSX_ARCHITECTURES MATCHES "[;$]")
  84. set(maybe_OBJECTS_DESTINATION OBJECTS DESTINATION $<1:lib>)
  85. else()
  86. set(maybe_OBJECTS_DESTINATION "")
  87. endif()
  88. cmake_policy(PUSH)
  89. cmake_policy(SET CMP0022 NEW)
  90. add_library(testLib9ObjPub OBJECT testLib9ObjPub.c)
  91. target_compile_definitions(testLib9ObjPub INTERFACE testLib9ObjPub_USED)
  92. add_library(testLib9ObjPriv OBJECT testLib9ObjPriv.c)
  93. target_compile_definitions(testLib9ObjPriv INTERFACE testLib9ObjPriv_USED)
  94. add_library(testLib9ObjIface OBJECT testLib9ObjIface.c)
  95. target_compile_definitions(testLib9ObjIface INTERFACE testLib9ObjIface_USED)
  96. add_library(testLib9 STATIC testLib9.c)
  97. target_link_libraries(testLib9 INTERFACE testLib9ObjIface PUBLIC testLib9ObjPub PRIVATE testLib9ObjPriv)
  98. target_link_libraries(testLib9 PUBLIC Foo::Foo)
  99. cmake_policy(POP)
  100. block()
  101. cmake_policy(SET CMP0022 NEW)
  102. add_library(testLib10 STATIC testLib10.c)
  103. set_target_properties(testLib10 PROPERTIES
  104. TRANSITIVE_COMPILE_PROPERTIES "CUSTOM_C"
  105. INTERFACE_CUSTOM_C "TESTLIB10_INTERFACE_CUSTOM_C"
  106. )
  107. target_compile_definitions(testLib10 INTERFACE
  108. "$<TARGET_PROPERTY:CUSTOM_C>"
  109. )
  110. add_library(testLib11 STATIC testLib11.c)
  111. target_link_libraries(testLib11 PRIVATE testLib10)
  112. set_target_properties(testLib11 PROPERTIES
  113. INTERFACE_CUSTOM_C "TESTLIB11_INTERFACE_CUSTOM_C"
  114. TRANSITIVE_COMPILE_PROPERTIES "CUSTOM_D"
  115. INTERFACE_CUSTOM_D "TESTLIB11_INTERFACE_CUSTOM_D"
  116. )
  117. target_compile_definitions(testLib11 INTERFACE
  118. "$<TARGET_PROPERTY:CUSTOM_C>"
  119. "$<TARGET_PROPERTY:CUSTOM_D>"
  120. )
  121. endblock()
  122. # Test using the target_link_libraries command to set the
  123. # LINK_INTERFACE_LIBRARIES* properties. We construct two libraries
  124. # providing the same two symbols. In each library one of the symbols
  125. # will work and the other one will fail to link. The import part of
  126. # this test will try to use the symbol corresponding to the
  127. # configuration in which it is built. If the proper library is not
  128. # used via the link interface the import test will fail to link.
  129. add_library(testLib4lib STATIC testLib4lib.c)
  130. add_library(testLib4libdbg STATIC testLib4libopt.c testLib4libdbg.c)
  131. add_library(testLib4libopt STATIC testLib4libdbg.c testLib4libopt.c)
  132. set_property(TARGET testLib4libdbg PROPERTY COMPILE_DEFINITIONS LIB_DBG)
  133. set_property(TARGET testLib4libopt PROPERTY COMPILE_DEFINITIONS LIB_OPT)
  134. target_link_libraries(testLib4
  135. LINK_INTERFACE_LIBRARIES
  136. testLib4lib debug testLib4libdbg optimized testLib4libopt
  137. )
  138. add_executable(testExe3 testExe3.c)
  139. set_property(TARGET testExe3 PROPERTY MACOSX_BUNDLE 1)
  140. # Test <ARCHIVE|LIBRARY|RUNTIME>_OUTPUT_DIRECTORY[_<CONFIG>] properties with generator expressions
  141. add_executable(testExe4 testExe4.c)
  142. target_link_libraries(testExe4 testExe1lib)
  143. set_property(TARGET testLib7 PROPERTY ARCHIVE_OUTPUT_DIRECTORY_DEBUG testLib7D-$<CONFIG>)
  144. set_property(TARGET testLib7 PROPERTY ARCHIVE_OUTPUT_DIRECTORY_RELEASE testLib7R-$<CONFIG>)
  145. set_property(TARGET testLib7 PROPERTY ARCHIVE_OUTPUT_DIRECTORY testLib7-$<CONFIG>)
  146. set_property(TARGET testLib5 PROPERTY LIBRARY_OUTPUT_DIRECTORY_DEBUG testLib5D-$<CONFIG>)
  147. set_property(TARGET testLib5 PROPERTY LIBRARY_OUTPUT_DIRECTORY_RELEASE testLib5R-$<CONFIG>)
  148. set_property(TARGET testLib5 PROPERTY LIBRARY_OUTPUT_DIRECTORY testLib5-$<CONFIG>)
  149. set_property(TARGET testExe4 PROPERTY RUNTIME_OUTPUT_DIRECTORY_DEBUG testExe4D-$<CONFIG>)
  150. set_property(TARGET testExe4 PROPERTY RUNTIME_OUTPUT_DIRECTORY_RELEASE testExe4R-$<CONFIG>)
  151. set_property(TARGET testExe4 PROPERTY RUNTIME_OUTPUT_DIRECTORY testExe4-$<CONFIG>)
  152. # Test cyclic dependencies.
  153. add_library(testLibCycleA STATIC
  154. testLibCycleA1.c testLibCycleA2.c testLibCycleA3.c)
  155. add_library(testLibCycleB STATIC
  156. testLibCycleB1.c testLibCycleB2.c testLibCycleB3.c)
  157. target_link_libraries(testLibCycleA testLibCycleB)
  158. target_link_libraries(testLibCycleB testLibCycleA)
  159. set_property(TARGET testLibCycleA PROPERTY LINK_INTERFACE_MULTIPLICITY 3)
  160. add_library(testLibNoSONAME SHARED testLibNoSONAME.c)
  161. set_property(TARGET testLibNoSONAME PROPERTY NO_SONAME 1)
  162. add_library(testInterfaceIncludeUser INTERFACE)
  163. target_include_directories(testInterfaceIncludeUser
  164. INTERFACE
  165. "$<INSTALL_INTERFACE:include/testInterfaceIncludeUser>"
  166. "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/testInterfaceIncludeUser>"
  167. )
  168. set_property(TARGET testInterfaceIncludeUser PROPERTY IMPORTED_NO_SYSTEM 1)
  169. add_library(testInterfaceIncludeUser2 INTERFACE)
  170. target_include_directories(testInterfaceIncludeUser2
  171. INTERFACE
  172. "$<INSTALL_INTERFACE:include/testInterfaceIncludeUser>"
  173. "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/testInterfaceIncludeUser>"
  174. )
  175. set_property(TARGET testInterfaceIncludeUser2 PROPERTY EXPORT_NO_SYSTEM 1)
  176. install(
  177. FILES
  178. "${CMAKE_CURRENT_SOURCE_DIR}/include/testInterfaceIncludeUser/testInterfaceInclude.h"
  179. DESTINATION include/testInterfaceIncludeUser
  180. )
  181. cmake_policy(PUSH)
  182. cmake_policy(SET CMP0022 NEW)
  183. # Test control over direct linking.
  184. include(../../InterfaceLinkLibrariesDirect/testStaticLibPlugin.cmake)
  185. include(../../InterfaceLinkLibrariesDirect/testSharedLibWithHelper.cmake)
  186. include(../../InterfaceLinkLibrariesDirect/testExeWithPluginHelper.cmake)
  187. if(NOT maybe_OBJECTS_DESTINATION)
  188. target_compile_definitions(testSharedLibHelperObj INTERFACE testSharedLibHelperObj_NO_OBJECT)
  189. target_compile_definitions(testExePluginHelperObj INTERFACE testExePluginHelperObj_NO_OBJECT)
  190. endif()
  191. # Test exporting dependent libraries into different exports
  192. add_library(testLibRequired testLibRequired.c)
  193. add_library(testLibDepends testLibDepends.c)
  194. target_link_libraries(testLibDepends LINK_PUBLIC testLibRequired)
  195. add_library(testStaticLibRequiredPrivate testStaticLibRequiredPrivate.c)
  196. target_link_libraries(testLibDepends PRIVATE testStaticLibRequiredPrivate)
  197. cmake_policy(POP)
  198. cmake_policy(PUSH)
  199. cmake_policy(SET CMP0022 NEW)
  200. cmake_policy(SET CMP0079 NEW)
  201. add_library(TopDirLib STATIC testTopDirLib.c)
  202. add_subdirectory(SubDirLinkA)
  203. add_subdirectory(SubDirLinkB)
  204. cmake_policy(POP)
  205. macro(add_include_lib _libName)
  206. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${_libName}.c" "/* no content */\n")
  207. add_library(${_libName} "${CMAKE_CURRENT_BINARY_DIR}/${_libName}.c")
  208. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${_libName}")
  209. set_property(TARGET ${_libName} APPEND PROPERTY
  210. INTERFACE_INCLUDE_DIRECTORIES
  211. "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/${_libName}>"
  212. )
  213. if (NOT "${ARGV1}" STREQUAL "NO_HEADER")
  214. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${_libName}/${_libName}.h" "/* no content */\n")
  215. install(FILES
  216. "${CMAKE_CURRENT_BINARY_DIR}/${_libName}/${_libName}.h"
  217. DESTINATION include/${_libName}
  218. )
  219. endif()
  220. endmacro()
  221. add_include_lib(testLibIncludeRequired1)
  222. add_include_lib(testLibIncludeRequired2)
  223. add_include_lib(testLibIncludeRequired3 NO_HEADER)
  224. # Generate testLibIncludeRequired4 in the testLibIncludeRequired3 directory
  225. # with an error. If the includes from testLibIncludeRequired3 appear first,
  226. # the error will be hit.
  227. # Below, the '3' library appears before the '4' library
  228. # but we are testing that the INSTALL_INTERFACE causes it not to be used
  229. # at build time.
  230. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/testLibIncludeRequired3/testLibIncludeRequired4.h" "#error Should not be included\n")
  231. install(FILES
  232. "${CMAKE_CURRENT_BINARY_DIR}/testLibIncludeRequired3/testLibIncludeRequired4.h"
  233. DESTINATION include/testLibIncludeRequired3
  234. )
  235. add_include_lib(testLibIncludeRequired4)
  236. add_include_lib(testLibIncludeRequired5 NO_HEADER)
  237. # Generate testLibIncludeRequired6 in the testLibIncludeRequired5 directory
  238. # with an error. If the includes from testLibIncludeRequired5 appear first,
  239. # the error will be hit.
  240. # Below, the '5' library appears before the '6' library
  241. # but we are testing that when the installed IMPORTED target is used, from
  242. # the Import side of this unit test, the '6' include from the '5' directory
  243. # will not be used because it is in the BUILD_INTERFACE only.
  244. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/testLibIncludeRequired5/testLibIncludeRequired6.h" "#error Should not be included\n")
  245. install(FILES
  246. "${CMAKE_CURRENT_BINARY_DIR}/testLibIncludeRequired5/testLibIncludeRequired6.h"
  247. DESTINATION include/testLibIncludeRequired5
  248. )
  249. add_include_lib(testLibIncludeRequired6)
  250. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/testLibIncludeRequired7/testLibIncludeRequired7.h" "/* No content */\n")
  251. install(FILES
  252. "${CMAKE_CURRENT_BINARY_DIR}/testLibIncludeRequired7/testLibIncludeRequired7.h"
  253. DESTINATION include/testLibIncludeRequired7
  254. )
  255. set_property(TARGET testLibRequired APPEND PROPERTY
  256. INTERFACE_INCLUDE_DIRECTORIES
  257. $<TARGET_PROPERTY:testLibIncludeRequired1,INTERFACE_INCLUDE_DIRECTORIES>
  258. $<TARGET_PROPERTY:$<1:$<TARGET_NAME:testLibIncludeRequired2>>,INTERFACE_INCLUDE_DIRECTORIES>
  259. $<INSTALL_INTERFACE:$<TARGET_PROPERTY:testLibIncludeRequired3,INTERFACE_INCLUDE_DIRECTORIES>>
  260. $<BUILD_INTERFACE:$<TARGET_PROPERTY:testLibIncludeRequired4,INTERFACE_INCLUDE_DIRECTORIES>>
  261. $<BUILD_INTERFACE:$<TARGET_PROPERTY:testLibIncludeRequired5,INTERFACE_INCLUDE_DIRECTORIES>>
  262. $<INSTALL_INTERFACE:$<TARGET_PROPERTY:testLibIncludeRequired6,INTERFACE_INCLUDE_DIRECTORIES>>
  263. # The BUILD_INTERFACE entry from above is duplicated below. This is to test that
  264. # the INSTALL_INTERFACE entry bound by a BUILD_INTERFACE entry on either side is
  265. # preprocessed correctly on install(EXPORT).
  266. $<BUILD_INTERFACE:$<TARGET_PROPERTY:testLibIncludeRequired5,INTERFACE_INCLUDE_DIRECTORIES>>
  267. # Test that the below is non-fatal
  268. $<$<STREQUAL:one,two>:$<TARGET_PROPERTY:not_a_target,INTERFACE_INCLUDE_DIRECTORIES>>
  269. $<INSTALL_INTERFACE:include/testLibIncludeRequired7;include/testLibIncludeRequired4>
  270. )
  271. set_property(TARGET testLibRequired APPEND PROPERTY
  272. INTERFACE_COMPILE_DEFINITIONS
  273. testLibRequired_IFACE_DEFINE
  274. $<BUILD_INTERFACE:BuildOnly_DEFINE>
  275. $<INSTALL_INTERFACE:InstallOnly_DEFINE>
  276. )
  277. include(GenerateExportHeader)
  278. # Test deprecation of imported library
  279. add_library(testLibDeprecation STATIC testLib1.c)
  280. set_property(TARGET testLibDeprecation PROPERTY DEPRECATION "Deprecated version. Please use latest version")
  281. add_subdirectory(renamed)
  282. add_library(testSharedLibRequired SHARED testSharedLibRequired.cpp)
  283. generate_export_header(testSharedLibRequired)
  284. set_property(TARGET testSharedLibRequired
  285. PROPERTY
  286. INTERFACE_POSITION_INDEPENDENT_CODE ON
  287. )
  288. set_property(TARGET testSharedLibRequired APPEND PROPERTY
  289. INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}"
  290. )
  291. install(FILES
  292. "${CMAKE_CURRENT_SOURCE_DIR}/testSharedLibRequired.h"
  293. "${CMAKE_CURRENT_BINARY_DIR}/testsharedlibrequired_export.h"
  294. DESTINATION include/testSharedLibRequired
  295. )
  296. set_property(TARGET testSharedLibRequired APPEND PROPERTY
  297. INTERFACE_INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR};${CMAKE_CURRENT_SOURCE_DIR}>"
  298. )
  299. set_property(TARGET testSharedLibRequired APPEND PROPERTY
  300. INTERFACE_COMPILE_DEFINITIONS USING_TESTSHAREDLIBREQUIRED
  301. )
  302. set_property(TARGET testSharedLibRequired
  303. APPEND PROPERTY
  304. COMPATIBLE_INTERFACE_BOOL CUSTOM_PROP
  305. )
  306. set_property(TARGET testSharedLibRequired
  307. PROPERTY
  308. INTERFACE_CUSTOM_PROP ON
  309. )
  310. set_property(TARGET testSharedLibRequired
  311. APPEND PROPERTY
  312. COMPATIBLE_INTERFACE_STRING CUSTOM_STRING
  313. )
  314. set_property(TARGET testSharedLibRequired
  315. PROPERTY
  316. INTERFACE_CUSTOM_STRING testcontent
  317. )
  318. set_property(TARGET testSharedLibRequired APPEND PROPERTY
  319. INTERFACE_COMPILE_OPTIONS
  320. $<$<CXX_COMPILER_ID:GNU>:-DCUSTOM_COMPILE_OPTION>
  321. $<$<CXX_COMPILER_ID:LCC>:-DCUSTOM_COMPILE_OPTION>
  322. )
  323. add_library(testSharedLibRequiredUser SHARED testSharedLibRequiredUser.cpp)
  324. generate_export_header(testSharedLibRequiredUser)
  325. # LINK_PRIVATE so that it appears in the LINK_DEPENDENT_LIBRARIES, but not
  326. # the INTERFACE_LINK_LIBRARIES.
  327. set_property(TARGET testSharedLibRequiredUser APPEND PROPERTY
  328. INTERFACE_INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR};${CMAKE_CURRENT_SOURCE_DIR}>"
  329. )
  330. target_link_libraries(testSharedLibRequiredUser LINK_PRIVATE testSharedLibRequired)
  331. install(FILES
  332. "${CMAKE_CURRENT_SOURCE_DIR}/testSharedLibRequiredUser.h"
  333. "${CMAKE_CURRENT_BINARY_DIR}/testsharedlibrequireduser_export.h"
  334. DESTINATION include/testSharedLibRequiredUser
  335. )
  336. cmake_policy(PUSH)
  337. cmake_policy(SET CMP0022 NEW)
  338. add_library(testSharedLibRequiredUser2 SHARED testSharedLibRequiredUser2.cpp)
  339. generate_export_header(testSharedLibRequiredUser2)
  340. set_property(TARGET testSharedLibRequiredUser2 APPEND PROPERTY
  341. INTERFACE_INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR};${CMAKE_CURRENT_SOURCE_DIR}>"
  342. )
  343. set_property(TARGET testSharedLibRequiredUser2 PROPERTY LINK_LIBRARIES testSharedLibRequired)
  344. set_property(TARGET testSharedLibRequiredUser2 PROPERTY INTERFACE_LINK_LIBRARIES testSharedLibRequired)
  345. install(FILES
  346. "${CMAKE_CURRENT_SOURCE_DIR}/testSharedLibRequiredUser2.h"
  347. "${CMAKE_CURRENT_BINARY_DIR}/testsharedlibrequireduser2_export.h"
  348. DESTINATION include/testSharedLibRequiredUser2
  349. )
  350. cmake_policy(POP)
  351. cmake_policy(PUSH)
  352. cmake_policy(SET CMP0041 NEW)
  353. add_library(testSharedLibDepends SHARED testSharedLibDepends.cpp)
  354. set_property(TARGET testSharedLibDepends APPEND PROPERTY
  355. INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}"
  356. )
  357. generate_export_header(testSharedLibDepends)
  358. set_property(TARGET testSharedLibDepends APPEND PROPERTY
  359. INTERFACE_INCLUDE_DIRECTORIES
  360. $<TARGET_PROPERTY:testSharedLibRequired,INTERFACE_INCLUDE_DIRECTORIES>
  361. )
  362. install(FILES
  363. "${CMAKE_CURRENT_SOURCE_DIR}/testSharedLibDepends.h"
  364. "${CMAKE_CURRENT_BINARY_DIR}/testsharedlibdepends_export.h"
  365. DESTINATION include/testSharedLibDepends
  366. )
  367. set_property(TARGET testSharedLibDepends APPEND PROPERTY
  368. INTERFACE_INCLUDE_DIRECTORIES "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/$<1:include>/testSharedLibDepends>"
  369. "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR};${CMAKE_CURRENT_SOURCE_DIR}>"
  370. )
  371. cmake_policy(POP)
  372. # LINK_PRIVATE because the LINK_INTERFACE_LIBRARIES is specified above.
  373. target_link_libraries(testSharedLibDepends LINK_PRIVATE testSharedLibRequired)
  374. target_link_libraries(testSharedLibDepends LINK_PUBLIC renamed_on_export)
  375. target_link_libraries(testSharedLibDepends LINK_INTERFACE_LIBRARIES
  376. $<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:$<TARGET_NAME:testSharedLibRequired>>)
  377. cmake_policy(PUSH)
  378. cmake_policy(SET CMP0022 OLD)
  379. add_library(cmp0022OLD SHARED cmp0022_vs6_1.cpp)
  380. generate_export_header(cmp0022OLD BASE_NAME cmp0022)
  381. target_include_directories(cmp0022OLD PUBLIC
  382. "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR};${CMAKE_CURRENT_SOURCE_DIR}>"
  383. "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include/cmp0022>"
  384. )
  385. cmake_policy(SET CMP0022 NEW)
  386. add_library(cmp0022NEW SHARED cmp0022_vs6_1.cpp)
  387. set_property(TARGET cmp0022NEW PROPERTY DEFINE_SYMBOL cmp0022OLD_EXPORTS)
  388. target_include_directories(cmp0022NEW PUBLIC
  389. "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR};${CMAKE_CURRENT_SOURCE_DIR}>"
  390. "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include/cmp0022>"
  391. )
  392. cmake_policy(POP)
  393. install(FILES
  394. "${CMAKE_CURRENT_SOURCE_DIR}/cmp0022.h"
  395. "${CMAKE_CURRENT_BINARY_DIR}/cmp0022_export.h"
  396. DESTINATION include/cmp0022
  397. )
  398. set_property(TARGET testLib2 APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS USING_TESTLIB2)
  399. set_property(TARGET testLib3 APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS USING_TESTLIB3)
  400. set_target_properties(testLib3 PROPERTIES
  401. EXPORT_PROPERTIES "EXPORTED_PROPERTY1"
  402. EXPORTED_PROPERTY1 "EXPORTING_TESTLIB3")
  403. set_target_properties(testLib4 PROPERTIES
  404. EXPORTED_PROPERTY2 "EXPORTING_TESTLIB4_1"
  405. EXPORTED_PROPERTY3 "EXPORTING_TESTLIB4_2")
  406. set_property(TARGET testLib4 PROPERTY
  407. EXPORT_PROPERTIES EXPORTED_PROPERTY2 EXPORTED_PROPERTY3)
  408. set_property(TARGET cmp0022NEW APPEND PROPERTY INTERFACE_LINK_LIBRARIES testLib2)
  409. # set_property(TARGET cmp0022NEW APPEND PROPERTY LINK_INTERFACE_LIBRARIES testLibIncludeRequired2) # TODO: Test for error
  410. set_property(TARGET cmp0022OLD APPEND PROPERTY INTERFACE_LINK_LIBRARIES testLib2)
  411. set_property(TARGET cmp0022OLD APPEND PROPERTY LINK_INTERFACE_LIBRARIES testLib3)
  412. add_library(noIncludesInterface empty.cpp)
  413. add_library(systemlib SHARED systemlib.cpp)
  414. install(FILES systemlib.h DESTINATION include/systemlib)
  415. target_include_directories(systemlib
  416. INTERFACE
  417. $<INSTALL_INTERFACE:include/systemlib>
  418. $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
  419. )
  420. add_library(testMod1 MODULE empty.cpp)
  421. add_library(testMod2 MODULE empty.cpp)
  422. set_property(TARGET testMod2 PROPERTY BUNDLE 1)
  423. install(TARGETS testLibRequired
  424. EXPORT RequiredExp DESTINATION lib
  425. INCLUDES DESTINATION
  426. installIncludesTest
  427. $<INSTALL_PREFIX>/installIncludesTest2
  428. installIncludesTest3/$<TARGET_PROPERTY:NAME>
  429. $<TARGET_PROPERTY:NAME>/installIncludesTest4
  430. $<INSTALL_INTERFACE:installIncludesTest5$<0:>>
  431. $<INSTALL_INTERFACE:$<0:>installIncludesTest6>
  432. $<INSTALL_INTERFACE:$<INSTALL_PREFIX>/installIncludesTest7>
  433. )
  434. target_include_directories(testLibRequired INTERFACE
  435. # These can't be in the above install(INCLUDES DESTINATION call because
  436. # that is only for installed interfaces. These directories are prefixes
  437. # in the build dir, which is an error for the installed interface.
  438. # We add them here so that we don't have to add conditions in the Import
  439. # component of the test.
  440. $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest5$<0:>>
  441. $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/$<0:>installIncludesTest6>
  442. $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest7>
  443. $<INSTALL_INTERFACE:installIncludesTest8/$<0:>>
  444. $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest8$<0:>>
  445. )
  446. install(TARGETS
  447. testLibIncludeRequired1
  448. testLibIncludeRequired2
  449. testLibIncludeRequired3
  450. testLibIncludeRequired4
  451. testLibIncludeRequired5
  452. testLibIncludeRequired6
  453. testSharedLibRequired
  454. testSharedLibRequiredUser
  455. testSharedLibRequiredUser2
  456. noIncludesInterface
  457. EXPORT RequiredExp DESTINATION lib
  458. INCLUDES DESTINATION
  459. $<INSTALL_PREFIX>/include/$<TARGET_PROPERTY:NAME>
  460. )
  461. install(TARGETS
  462. testStaticLibRequiredPrivate
  463. EXPORT RequiredExp DESTINATION lib
  464. )
  465. install(EXPORT RequiredExp NAMESPACE Req:: FILE testLibRequiredTargets.cmake DESTINATION lib/cmake/testLibRequired)
  466. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest")
  467. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest/installIncludesTest.h" "/* No content */\n")
  468. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest2")
  469. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest2/installIncludesTest2.h" "/* No content */\n")
  470. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest3/testLibRequired")
  471. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest3/testLibRequired/installIncludesTest3.h" "/* No content */\n")
  472. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/testLibRequired/installIncludesTest4")
  473. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/testLibRequired/installIncludesTest4/installIncludesTest4.h" "/* No content */\n")
  474. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest5")
  475. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest5/installIncludesTest5.h" "/* No content */\n")
  476. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest6")
  477. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest6/installIncludesTest6.h" "/* No content */\n")
  478. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest7")
  479. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest7/installIncludesTest7.h" "/* No content */\n")
  480. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest8")
  481. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest8/installIncludesTest8.h" "/* No content */\n")
  482. install(FILES
  483. "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest/installIncludesTest.h"
  484. DESTINATION installIncludesTest
  485. )
  486. install(FILES
  487. "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest2/installIncludesTest2.h"
  488. DESTINATION installIncludesTest2
  489. )
  490. install(FILES
  491. "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest3/testLibRequired/installIncludesTest3.h"
  492. DESTINATION installIncludesTest3/testLibRequired
  493. )
  494. install(FILES
  495. "${CMAKE_CURRENT_BINARY_DIR}/testLibRequired/installIncludesTest4/installIncludesTest4.h"
  496. DESTINATION testLibRequired/installIncludesTest4
  497. )
  498. install(FILES
  499. "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest5/installIncludesTest5.h"
  500. DESTINATION installIncludesTest5
  501. )
  502. install(FILES
  503. "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest6/installIncludesTest6.h"
  504. DESTINATION installIncludesTest6
  505. )
  506. install(FILES
  507. "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest7/installIncludesTest7.h"
  508. DESTINATION installIncludesTest7
  509. )
  510. install(FILES
  511. "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest8/installIncludesTest8.h"
  512. DESTINATION installIncludesTest8
  513. )
  514. install(TARGETS testLibDepends testSharedLibDepends EXPORT DependsExp DESTINATION lib )
  515. install(EXPORT DependsExp FILE testLibDependsTargets.cmake DESTINATION lib/cmake/testLibDepends)
  516. file(WRITE
  517. "${CMAKE_CURRENT_BINARY_DIR}/testLibRequiredConfig.cmake"
  518. "
  519. if(\${CMAKE_FIND_PACKAGE_NAME}_FIND_VERSION VERSION_LESS 2.3 AND NOT \${CMAKE_FIND_PACKAGE_NAME}_INTERFACES)
  520. set(\${CMAKE_FIND_PACKAGE_NAME}_NO_INTERFACES 1)
  521. endif()
  522. include(\"\${CMAKE_CURRENT_LIST_DIR}/testLibRequiredTargets.cmake\")
  523. set(\${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIRS \"${CMAKE_CURRENT_BINARY_DIR}\" \"${CMAKE_CURRENT_SOURCE_DIR}\" )
  524. "
  525. )
  526. include(CMakePackageConfigHelpers)
  527. write_basic_package_version_file( testLibRequiredConfigVersion.cmake VERSION 2.5 COMPATIBILITY AnyNewerVersion)
  528. install(FILES
  529. "${CMAKE_CURRENT_BINARY_DIR}/testLibRequiredConfig.cmake"
  530. "${CMAKE_CURRENT_BINARY_DIR}/testLibRequiredConfigVersion.cmake"
  531. DESTINATION lib/cmake/testLibRequired
  532. )
  533. # Install and export from install tree.
  534. install(
  535. TARGETS
  536. compileOnly
  537. testExe1 testLib1 testLib2 testExe2 testLib3 testLib4 testExe3 testExe4
  538. testExe2lib testLib4lib testLib4libdbg testLib4libopt
  539. testLib6 testLib7 testLib8
  540. testLib9
  541. testLib10 testLib11
  542. testLibDeprecation
  543. testLibCycleA testLibCycleB
  544. testLibNoSONAME
  545. testStaticLibWithPlugin testStaticLibPluginExtra testStaticLibPlugin
  546. testSharedLibWithHelper testSharedLibHelperObj
  547. testExeWithPluginHelper testExePluginHelperObj
  548. testMod1 testMod2
  549. cmp0022NEW cmp0022OLD
  550. TopDirLib SubDirLinkA
  551. systemlib
  552. testInterfaceIncludeUser
  553. testInterfaceIncludeUser2
  554. EXPORT exp
  555. RUNTIME DESTINATION $<1:bin>$<0:/wrong>
  556. LIBRARY DESTINATION $<1:lib>$<0:/wrong> NAMELINK_SKIP
  557. ARCHIVE DESTINATION $<1:lib>$<0:/wrong>
  558. ${maybe_OBJECTS_DESTINATION}
  559. FRAMEWORK DESTINATION Frameworks
  560. BUNDLE DESTINATION Applications
  561. )
  562. install(
  563. TARGETS
  564. testLib9ObjPub testLib9ObjPriv testLib9ObjIface
  565. EXPORT exp
  566. )
  567. if (APPLE)
  568. file(COPY testLib4.h DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/testLib4.framework/Headers)
  569. file(COPY testLib4.h DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/Debug/testLib4.framework/Headers)
  570. file(COPY testLib4.h DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/Release/testLib4.framework/Headers)
  571. install(FILES testLib4.h DESTINATION Frameworks/testLib4.framework/Headers)
  572. endif()
  573. install(
  574. TARGETS
  575. testExe2libImp testLib3Imp
  576. EXPORT exp
  577. RUNTIME DESTINATION bin
  578. LIBRARY DESTINATION lib/impl
  579. ARCHIVE DESTINATION lib/impl
  580. )
  581. install(
  582. TARGETS
  583. testLib3ImpDep
  584. EXPORT exp
  585. RUNTIME DESTINATION bin
  586. LIBRARY DESTINATION lib/impl/dep
  587. ARCHIVE DESTINATION lib/impl/dep
  588. )
  589. install(
  590. TARGETS testLib5
  591. EXPORT exp
  592. # Leave out RUNTIME DESTINATION to test implib-only export.
  593. LIBRARY DESTINATION lib
  594. ARCHIVE DESTINATION lib
  595. )
  596. install(EXPORT exp NAMESPACE exp_ DESTINATION lib/exp EXPORT_PACKAGE_DEPENDENCIES)
  597. # Install testLib5.dll outside the export.
  598. if(WIN32)
  599. install(TARGETS testLib5 RUNTIME DESTINATION bin)
  600. endif()
  601. add_subdirectory(sublib) # For CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE test.
  602. # Export from build tree.
  603. export(TARGETS testExe1 testLib1 testLib2 testLib3
  604. testExe2libImp testLib3Imp testLib3ImpDep subdirlib
  605. testSharedLibRequired testSharedLibRequiredUser testSharedLibRequiredUser2
  606. testSharedLibDepends renamed_on_export
  607. cmp0022NEW cmp0022OLD
  608. TopDirLib SubDirLinkA
  609. systemlib
  610. testInterfaceIncludeUser
  611. testInterfaceIncludeUser2
  612. NAMESPACE bld_
  613. FILE ExportBuildTree.cmake
  614. )
  615. export(TARGETS testExe2 testLib4 testLib5 testLib6 testLib7 testExe3 testExe4 testExe2lib
  616. testLib8
  617. testLib9 testLib9ObjPub testLib9ObjPriv testLib9ObjIface
  618. testLib10 testLib11
  619. testLibDeprecation
  620. testLib4lib testLib4libdbg testLib4libopt
  621. testLibCycleA testLibCycleB
  622. testLibNoSONAME
  623. testStaticLibWithPlugin testStaticLibPluginExtra testStaticLibPlugin
  624. testSharedLibWithHelper testSharedLibHelperObj
  625. testExeWithPluginHelper testExePluginHelperObj
  626. testMod1 testMod2
  627. testLibPerConfigDest
  628. NAMESPACE bld_
  629. APPEND FILE ExportBuildTree.cmake
  630. )
  631. add_subdirectory(Interface)
  632. #-----------------------------------------------------------------------------
  633. # Install export with absolute destination but relative pieces.
  634. add_library(testLibAbs1 STATIC testLibAbs1.c)
  635. target_include_directories(testLibAbs1 INTERFACE
  636. "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include/abs/1a;include/abs/1b>"
  637. )
  638. install(
  639. TARGETS testLibAbs1
  640. EXPORT expAbs
  641. ARCHIVE DESTINATION lib
  642. INCLUDES DESTINATION include/abs
  643. )
  644. install(DIRECTORY $<1:include/abs>$<0:/wrong> DESTINATION $<1:include>$<0:/wrong>)
  645. install(EXPORT expAbs NAMESPACE expAbs_ DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/expAbs)
  646. #------------------------------------------------------------------------------
  647. # test export of INTERFACE_LINK_OPTIONS
  648. add_library(testLinkOptions INTERFACE)
  649. target_link_options(testLinkOptions INTERFACE INTERFACE_FLAG)
  650. install(TARGETS testLinkOptions
  651. EXPORT RequiredExp DESTINATION lib)
  652. export(TARGETS testLinkOptions NAMESPACE bld_ APPEND FILE ExportBuildTree.cmake)
  653. #------------------------------------------------------------------------------
  654. # test export of INTERFACE_LINK_DIRECTORIES
  655. add_library(testLinkDirectories INTERFACE)
  656. target_link_directories(testLinkDirectories INTERFACE
  657. $<BUILD_INTERFACE:/interface/build>
  658. $<INSTALL_INTERFACE:interface/install>)
  659. install(TARGETS testLinkDirectories
  660. EXPORT RequiredExp DESTINATION lib)
  661. export(TARGETS testLinkDirectories NAMESPACE bld_ APPEND FILE ExportBuildTree.cmake)
  662. #------------------------------------------------------------------------------
  663. # test export of INTERFACE_LINK_DEPENDS
  664. if(CMAKE_GENERATOR MATCHES "Make|Ninja")
  665. add_library(testLinkDepends INTERFACE)
  666. set_property(TARGET testLinkDepends PROPERTY INTERFACE_LINK_DEPENDS
  667. $<BUILD_INTERFACE:BUILD_LINK_DEPENDS>
  668. $<INSTALL_INTERFACE:INSTALL_LINK_DEPENDS>)
  669. install(TARGETS testLinkDepends
  670. EXPORT RequiredExp DESTINATION lib)
  671. export(TARGETS testLinkDepends NAMESPACE bld_ APPEND FILE ExportBuildTree.cmake)
  672. endif()
  673. #------------------------------------------------------------------------------
  674. # test export of CUDA language
  675. if(CMake_TEST_CUDA)
  676. enable_language(CUDA)
  677. add_library(cudaInterfaceLib INTERFACE)
  678. target_compile_features(cudaInterfaceLib INTERFACE $<BUILD_INTERFACE:cuda_std_11> $<INSTALL_INTERFACE:cuda_std_14>)
  679. install(TARGETS cudaInterfaceLib
  680. EXPORT RequiredExp DESTINATION lib)
  681. export(TARGETS cudaInterfaceLib NAMESPACE bld_ APPEND FILE ExportBuildTree.cmake)
  682. endif()
  683. # Test the presence of targets named the same as languages.
  684. # IMPORTED_LINK_INTERFACE_LANGUAGES entries should not be targets.
  685. add_library(C INTERFACE)
  686. add_library(CXX INTERFACE)
  687. #------------------------------------------------------------------------------
  688. # test export of targets built from sources named using $<CONFIG> generator-expression
  689. # FIXME: Enable test on Xcode generator when it supports per-config sources.
  690. if(NOT XCODE)
  691. file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/Generated_$<CONFIG>.cpp" CONTENT "// content")
  692. add_library(testStaticFromGeneratedSource STATIC)
  693. target_sources(testStaticFromGeneratedSource PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/Generated_$<CONFIG>.cpp")
  694. add_library(testLibFromGeneratedSource SHARED empty.cpp)
  695. target_link_libraries(testLibFromGeneratedSource PRIVATE testStaticFromGeneratedSource)
  696. install(TARGETS testLibFromGeneratedSource EXPORT testLibFromGeneratedSource_Export)
  697. install(EXPORT testLibFromGeneratedSource_Export DESTINATION lib)
  698. endif()
  699. add_subdirectory(install-RUNTIME_DEPENDENCY_SET)