CMakeLists.txt 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428
  1. cmake_minimum_required (VERSION 2.7.20090711)
  2. project(Export C CXX)
  3. # Pretend that RelWithDebInfo should link to debug libraries to test
  4. # the DEBUG_CONFIGURATIONS property.
  5. set_property(GLOBAL PROPERTY DEBUG_CONFIGURATIONS Debug RelWithDebInfo)
  6. add_library(testExe1lib STATIC testExe1lib.c) # not exported
  7. add_executable(testExe1 testExe1.c)
  8. target_link_libraries(testExe1 testExe1lib)
  9. set_property(TARGET testExe1 PROPERTY VERSION 4)
  10. add_library(testExe2libImp SHARED testExe2libImp.c)
  11. set_property(TARGET testExe2libImp PROPERTY LIBRARY_OUTPUT_DIRECTORY impl)
  12. add_library(testExe2lib SHARED testExe2lib.c)
  13. target_link_libraries(testExe2lib testExe2libImp)
  14. set_property(TARGET testExe2lib PROPERTY LINK_INTERFACE_LIBRARIES "")
  15. add_executable(testExe2 testExe2.c)
  16. set_property(TARGET testExe2 PROPERTY ENABLE_EXPORTS 1)
  17. set_property(TARGET testExe2 PROPERTY LINK_INTERFACE_LIBRARIES testExe2lib)
  18. add_library(testLib1 STATIC testLib1.c)
  19. add_library(testLib2 STATIC testLib2.c)
  20. target_link_libraries(testLib2 testLib1)
  21. # Test library with empty link interface. Link it to an implementation
  22. # dependency that itself links to dependencies publicly.
  23. add_library(testLib3ImpDep SHARED testLib3ImpDep.c)
  24. set_property(TARGET testLib3ImpDep PROPERTY LIBRARY_OUTPUT_DIRECTORY impl/dep)
  25. add_library(testLib3Imp SHARED testLib3Imp.c)
  26. set_property(TARGET testLib3Imp PROPERTY LIBRARY_OUTPUT_DIRECTORY impl)
  27. target_link_libraries(testLib3Imp testLib3ImpDep)
  28. add_library(testLib3 SHARED testLib3.c)
  29. target_link_libraries(testLib3 testLib3Imp)
  30. set_property(TARGET testLib3 PROPERTY LINK_INTERFACE_LIBRARIES "")
  31. set_property(TARGET testLib3 PROPERTY VERSION 1.2)
  32. set_property(TARGET testLib3 PROPERTY SOVERSION 3)
  33. # Test <ARCHIVE|LIBRARY|RUNTIME>_OUTPUT_NAME[_<CONFIG>] properties.
  34. set_property(TARGET testLib3 PROPERTY RUNTIME_OUTPUT_NAME_DEBUG testLib3dll-d)
  35. set_property(TARGET testLib3 PROPERTY RUNTIME_OUTPUT_NAME_RELEASE testLib3dll-r)
  36. set_property(TARGET testLib3 PROPERTY RUNTIME_OUTPUT_NAME testLib3dll)
  37. set_property(TARGET testLib3 PROPERTY LIBRARY_OUTPUT_NAME_DEBUG testLib3lib-d)
  38. set_property(TARGET testLib3 PROPERTY LIBRARY_OUTPUT_NAME_RELEASE testLib3lib-r)
  39. set_property(TARGET testLib3 PROPERTY LIBRARY_OUTPUT_NAME testLib3lib)
  40. set_property(TARGET testLib3 PROPERTY ARCHIVE_OUTPUT_NAME testLib3import)
  41. add_library(testLib4 SHARED testLib4.c)
  42. set_property(TARGET testLib4 PROPERTY FRAMEWORK 1)
  43. add_library(testLib5 SHARED testLib5.c)
  44. add_library(testLib6 STATIC testLib6.cxx testLib6c.c)
  45. # Work-around: Visual Studio 6 does not support per-target object files.
  46. set(VS6)
  47. if("${CMAKE_GENERATOR}" MATCHES "Visual Studio 6")
  48. set(VS6 1)
  49. endif()
  50. # Test using the target_link_libraries command to set the
  51. # LINK_INTERFACE_LIBRARIES* properties. We construct two libraries
  52. # providing the same two symbols. In each library one of the symbols
  53. # will work and the other one will fail to link. The import part of
  54. # this test will try to use the symbol corresponding to the
  55. # configuration in which it is built. If the proper library is not
  56. # used via the link interface the import test will fail to link.
  57. add_library(testLib4lib STATIC testLib4lib.c)
  58. add_library(testLib4libdbg STATIC testLib4libopt.c testLib4libdbg${VS6}.c)
  59. add_library(testLib4libopt STATIC testLib4libdbg.c testLib4libopt${VS6}.c)
  60. set_property(TARGET testLib4libdbg PROPERTY COMPILE_DEFINITIONS LIB_DBG)
  61. set_property(TARGET testLib4libopt PROPERTY COMPILE_DEFINITIONS LIB_OPT)
  62. target_link_libraries(testLib4
  63. LINK_INTERFACE_LIBRARIES
  64. testLib4lib debug testLib4libdbg optimized testLib4libopt
  65. )
  66. add_executable(testExe3 testExe3.c)
  67. set_property(TARGET testExe3 PROPERTY MACOSX_BUNDLE 1)
  68. # Test cyclic dependencies.
  69. add_library(testLibCycleA STATIC
  70. testLibCycleA1.c testLibCycleA2.c testLibCycleA3.c)
  71. add_library(testLibCycleB STATIC
  72. testLibCycleB1.c testLibCycleB2.c testLibCycleB3.c)
  73. target_link_libraries(testLibCycleA testLibCycleB)
  74. target_link_libraries(testLibCycleB testLibCycleA)
  75. set_property(TARGET testLibCycleA PROPERTY LINK_INTERFACE_MULTIPLICITY 3)
  76. # Test exporting dependent libraries into different exports
  77. add_library(testLibRequired testLibRequired.c)
  78. add_library(testLibDepends testLibDepends.c)
  79. target_link_libraries(testLibDepends LINK_PUBLIC testLibRequired)
  80. macro(add_include_lib _libName)
  81. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${_libName}.c" "// no content\n")
  82. add_library(${_libName} "${CMAKE_CURRENT_BINARY_DIR}/${_libName}.c")
  83. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${_libName}")
  84. set_property(TARGET ${_libName} APPEND PROPERTY
  85. INTERFACE_INCLUDE_DIRECTORIES
  86. "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/${_libName}>"
  87. )
  88. if (NOT "${ARGV1}" STREQUAL "NO_HEADER")
  89. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${_libName}/${_libName}.h" "// no content\n")
  90. install(FILES
  91. "${CMAKE_CURRENT_BINARY_DIR}/${_libName}/${_libName}.h"
  92. DESTINATION include/${_libName}
  93. )
  94. endif()
  95. endmacro()
  96. add_include_lib(testLibIncludeRequired1)
  97. add_include_lib(testLibIncludeRequired2)
  98. add_include_lib(testLibIncludeRequired3 NO_HEADER)
  99. # Generate testLibIncludeRequired4 in the testLibIncludeRequired3 directory
  100. # with an error. If the includes from testLibIncludeRequired3 appear first,
  101. # the error will be hit.
  102. # Below, the '3' library appears before the '4' library
  103. # but we are testing that the INSTALL_INTERFACE causes it not to be used
  104. # at build time.
  105. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/testLibIncludeRequired3/testLibIncludeRequired4.h" "#error Should not be included\n")
  106. install(FILES
  107. "${CMAKE_CURRENT_BINARY_DIR}/testLibIncludeRequired3/testLibIncludeRequired4.h"
  108. DESTINATION include/testLibIncludeRequired3
  109. )
  110. add_include_lib(testLibIncludeRequired4)
  111. add_include_lib(testLibIncludeRequired5 NO_HEADER)
  112. # Generate testLibIncludeRequired6 in the testLibIncludeRequired5 directory
  113. # with an error. If the includes from testLibIncludeRequired5 appear first,
  114. # the error will be hit.
  115. # Below, the '5' library appears before the '6' library
  116. # but we are testing that when the installed IMPORTED target is used, from
  117. # the Import side of this unit test, the '6' include from the '5' directory
  118. # will not be used because it is in the BUILD_INTERFACE only.
  119. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/testLibIncludeRequired5/testLibIncludeRequired6.h" "#error Should not be included\n")
  120. install(FILES
  121. "${CMAKE_CURRENT_BINARY_DIR}/testLibIncludeRequired5/testLibIncludeRequired6.h"
  122. DESTINATION include/testLibIncludeRequired5
  123. )
  124. add_include_lib(testLibIncludeRequired6)
  125. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/testLibIncludeRequired7/testLibIncludeRequired7.h" "// No content\n")
  126. install(FILES
  127. "${CMAKE_CURRENT_BINARY_DIR}/testLibIncludeRequired7/testLibIncludeRequired7.h"
  128. DESTINATION include/testLibIncludeRequired7
  129. )
  130. set_property(TARGET testLibRequired APPEND PROPERTY
  131. INTERFACE_INCLUDE_DIRECTORIES
  132. $<TARGET_PROPERTY:testLibIncludeRequired1,INTERFACE_INCLUDE_DIRECTORIES>
  133. $<TARGET_PROPERTY:$<1:$<TARGET_NAME:testLibIncludeRequired2>>,INTERFACE_INCLUDE_DIRECTORIES>
  134. $<INSTALL_INTERFACE:$<TARGET_PROPERTY:testLibIncludeRequired3,INTERFACE_INCLUDE_DIRECTORIES>>
  135. $<BUILD_INTERFACE:$<TARGET_PROPERTY:testLibIncludeRequired4,INTERFACE_INCLUDE_DIRECTORIES>>
  136. $<BUILD_INTERFACE:$<TARGET_PROPERTY:testLibIncludeRequired5,INTERFACE_INCLUDE_DIRECTORIES>>
  137. $<INSTALL_INTERFACE:$<TARGET_PROPERTY:testLibIncludeRequired6,INTERFACE_INCLUDE_DIRECTORIES>>
  138. # The BUILD_INTERFACE entry from above is duplicated below. This is to test that
  139. # the INSTALL_INTERFACE entry bound by a BUILD_INTERFACE entry on either side is
  140. # preprocessed correctly on install(EXPORT).
  141. $<BUILD_INTERFACE:$<TARGET_PROPERTY:testLibIncludeRequired5,INTERFACE_INCLUDE_DIRECTORIES>>
  142. # Test that the below is non-fatal
  143. $<$<STREQUAL:one,two>:$<TARGET_PROPERTY:not_a_target,INTERFACE_INCLUDE_DIRECTORIES>>
  144. $<INSTALL_INTERFACE:include/testLibIncludeRequired7>
  145. )
  146. set_property(TARGET testLibRequired APPEND PROPERTY
  147. INTERFACE_COMPILE_DEFINITIONS
  148. testLibRequired_IFACE_DEFINE
  149. $<BUILD_INTERFACE:BuildOnly_DEFINE>
  150. $<INSTALL_INTERFACE:InstallOnly_DEFINE>
  151. )
  152. include(GenerateExportHeader)
  153. add_subdirectory(renamed)
  154. add_library(testSharedLibRequired SHARED testSharedLibRequired.cpp)
  155. generate_export_header(testSharedLibRequired)
  156. set_property(TARGET testSharedLibRequired
  157. PROPERTY
  158. INTERFACE_POSITION_INDEPENDENT_CODE ON
  159. )
  160. set_property(TARGET testSharedLibRequired APPEND PROPERTY
  161. INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}"
  162. )
  163. install(FILES
  164. "${CMAKE_CURRENT_SOURCE_DIR}/testSharedLibRequired.h"
  165. "${CMAKE_CURRENT_BINARY_DIR}/testsharedlibrequired_export.h"
  166. DESTINATION include/testSharedLibRequired
  167. )
  168. set_property(TARGET testSharedLibRequired APPEND PROPERTY
  169. INTERFACE_INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR};${CMAKE_CURRENT_SOURCE_DIR}>"
  170. )
  171. set_property(TARGET testSharedLibRequired APPEND PROPERTY
  172. INTERFACE_COMPILE_DEFINITIONS USING_TESTSHAREDLIBREQUIRED
  173. )
  174. set_property(TARGET testSharedLibRequired
  175. APPEND PROPERTY
  176. COMPATIBLE_INTERFACE_BOOL CUSTOM_PROP
  177. )
  178. set_property(TARGET testSharedLibRequired
  179. PROPERTY
  180. INTERFACE_CUSTOM_PROP ON
  181. )
  182. set_property(TARGET testSharedLibRequired
  183. APPEND PROPERTY
  184. COMPATIBLE_INTERFACE_STRING CUSTOM_STRING
  185. )
  186. set_property(TARGET testSharedLibRequired
  187. PROPERTY
  188. INTERFACE_CUSTOM_STRING testcontent
  189. )
  190. set_property(TARGET testSharedLibRequired APPEND PROPERTY
  191. INTERFACE_COMPILE_OPTIONS
  192. $<$<CXX_COMPILER_ID:GNU>:-DCUSTOM_COMPILE_OPTION>
  193. )
  194. add_library(testSharedLibRequiredUser SHARED testSharedLibRequiredUser.cpp)
  195. generate_export_header(testSharedLibRequiredUser)
  196. # LINK_PRIVATE so that it appears in the LINK_DEPENDENT_LIBRARIES, but not
  197. # the INTERFACE_LINK_LIBRARIES.
  198. set_property(TARGET testSharedLibRequiredUser APPEND PROPERTY
  199. INTERFACE_INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR};${CMAKE_CURRENT_SOURCE_DIR}>"
  200. )
  201. target_link_libraries(testSharedLibRequiredUser LINK_PRIVATE testSharedLibRequired)
  202. install(FILES
  203. "${CMAKE_CURRENT_SOURCE_DIR}/testSharedLibRequiredUser.h"
  204. "${CMAKE_CURRENT_BINARY_DIR}/testsharedlibrequireduser_export.h"
  205. DESTINATION include/testSharedLibRequiredUser
  206. )
  207. cmake_policy(SET CMP0022 NEW)
  208. add_library(testSharedLibRequiredUser2 SHARED testSharedLibRequiredUser2.cpp)
  209. generate_export_header(testSharedLibRequiredUser2)
  210. set_property(TARGET testSharedLibRequiredUser2 APPEND PROPERTY
  211. INTERFACE_INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR};${CMAKE_CURRENT_SOURCE_DIR}>"
  212. )
  213. set_property(TARGET testSharedLibRequiredUser2 PROPERTY LINK_LIBRARIES testSharedLibRequired)
  214. set_property(TARGET testSharedLibRequiredUser2 PROPERTY INTERFACE_LINK_LIBRARIES testSharedLibRequired)
  215. install(FILES
  216. "${CMAKE_CURRENT_SOURCE_DIR}/testSharedLibRequiredUser2.h"
  217. "${CMAKE_CURRENT_BINARY_DIR}/testsharedlibrequireduser2_export.h"
  218. DESTINATION include/testSharedLibRequiredUser2
  219. )
  220. cmake_policy(SET CMP0022 OLD)
  221. add_library(testSharedLibDepends SHARED testSharedLibDepends.cpp)
  222. set_property(TARGET testSharedLibDepends APPEND PROPERTY
  223. INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}"
  224. )
  225. generate_export_header(testSharedLibDepends)
  226. set_property(TARGET testSharedLibDepends APPEND PROPERTY
  227. INTERFACE_INCLUDE_DIRECTORIES
  228. $<TARGET_PROPERTY:testSharedLibRequired,INTERFACE_INCLUDE_DIRECTORIES>
  229. )
  230. install(FILES
  231. "${CMAKE_CURRENT_SOURCE_DIR}/testSharedLibDepends.h"
  232. "${CMAKE_CURRENT_BINARY_DIR}/testsharedlibdepends_export.h"
  233. DESTINATION include/testSharedLibDepends
  234. )
  235. set_property(TARGET testSharedLibDepends APPEND PROPERTY
  236. INTERFACE_INCLUDE_DIRECTORIES "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include/testSharedLibDepends>"
  237. "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR};${CMAKE_CURRENT_SOURCE_DIR}>"
  238. )
  239. # LINK_PRIVATE because the LINK_INTERFACE_LIBRARIES is specified above.
  240. target_link_libraries(testSharedLibDepends LINK_PRIVATE testSharedLibRequired)
  241. target_link_libraries(testSharedLibDepends LINK_PUBLIC renamed_on_export)
  242. target_link_libraries(testSharedLibDepends LINK_INTERFACE_LIBRARIES
  243. $<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:$<TARGET_NAME:testSharedLibRequired>>)
  244. add_library(cmp0022OLD SHARED cmp0022_vs6_1.cpp)
  245. generate_export_header(cmp0022OLD BASE_NAME cmp0022)
  246. target_include_directories(cmp0022OLD PUBLIC
  247. "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR};${CMAKE_CURRENT_SOURCE_DIR}>"
  248. "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include/cmp0022>"
  249. )
  250. cmake_policy(SET CMP0022 NEW)
  251. add_library(cmp0022NEW SHARED cmp0022_vs6_1.cpp)
  252. set_property(TARGET cmp0022NEW PROPERTY DEFINE_SYMBOL cmp0022OLD_EXPORTS)
  253. target_include_directories(cmp0022NEW PUBLIC
  254. "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR};${CMAKE_CURRENT_SOURCE_DIR}>"
  255. "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include/cmp0022>"
  256. )
  257. cmake_policy(SET CMP0022 OLD)
  258. install(FILES
  259. "${CMAKE_CURRENT_SOURCE_DIR}/cmp0022.h"
  260. "${CMAKE_CURRENT_BINARY_DIR}/cmp0022_export.h"
  261. DESTINATION include/cmp0022
  262. )
  263. set_property(TARGET testLib2 APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS USING_TESTLIB2)
  264. set_property(TARGET testLib3 APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS USING_TESTLIB3)
  265. set_property(TARGET cmp0022NEW APPEND PROPERTY INTERFACE_LINK_LIBRARIES testLib2)
  266. # set_property(TARGET cmp0022NEW APPEND PROPERTY LINK_INTERFACE_LIBRARIES testLibIncludeRequired2) # TODO: Test for error
  267. set_property(TARGET cmp0022OLD APPEND PROPERTY INTERFACE_LINK_LIBRARIES testLib2)
  268. set_property(TARGET cmp0022OLD APPEND PROPERTY LINK_INTERFACE_LIBRARIES testLib3)
  269. add_library(noIncludesInterface empty.cpp)
  270. install(TARGETS testLibRequired
  271. EXPORT RequiredExp DESTINATION lib
  272. INCLUDES DESTINATION
  273. installIncludesTest
  274. $<INSTALL_PREFIX>/installIncludesTest2
  275. )
  276. install(TARGETS
  277. testLibIncludeRequired1
  278. testLibIncludeRequired2
  279. testLibIncludeRequired3
  280. testLibIncludeRequired4
  281. testLibIncludeRequired5
  282. testLibIncludeRequired6
  283. testSharedLibRequired
  284. testSharedLibRequiredUser
  285. testSharedLibRequiredUser2
  286. noIncludesInterface
  287. EXPORT RequiredExp DESTINATION lib
  288. INCLUDES DESTINATION
  289. $<INSTALL_PREFIX>/include/$<TARGET_PROPERTY:NAME>
  290. )
  291. install(EXPORT RequiredExp NAMESPACE Req:: FILE testLibRequiredTargets.cmake DESTINATION lib/cmake/testLibRequired)
  292. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest")
  293. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest/installIncludesTest.h" "// No content\n")
  294. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest2")
  295. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest2/installIncludesTest2.h" "// No content\n")
  296. install(FILES
  297. "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest/installIncludesTest.h"
  298. DESTINATION installIncludesTest
  299. )
  300. install(FILES
  301. "${CMAKE_CURRENT_BINARY_DIR}/installIncludesTest2/installIncludesTest2.h"
  302. DESTINATION installIncludesTest2
  303. )
  304. install(TARGETS testLibDepends testSharedLibDepends EXPORT DependsExp DESTINATION lib )
  305. install(EXPORT DependsExp FILE testLibDependsTargets.cmake DESTINATION lib/cmake/testLibDepends)
  306. file(WRITE
  307. "${CMAKE_CURRENT_BINARY_DIR}/testLibRequiredConfig.cmake"
  308. "
  309. if(\${CMAKE_FIND_PACKAGE_NAME}_FIND_VERSION VERSION_LESS 2.3 AND NOT \${CMAKE_FIND_PACKAGE_NAME}_INTERFACES)
  310. set(\${CMAKE_FIND_PACKAGE_NAME}_NO_INTERFACES 1)
  311. endif()
  312. include(\"\${CMAKE_CURRENT_LIST_DIR}/testLibRequiredTargets.cmake\")
  313. set(\${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIRS \"${CMAKE_CURRENT_BINARY_DIR}\" \"${CMAKE_CURRENT_SOURCE_DIR}\" )
  314. "
  315. )
  316. include(CMakePackageConfigHelpers)
  317. write_basic_package_version_file( testLibRequiredConfigVersion.cmake VERSION 2.5 COMPATIBILITY AnyNewerVersion)
  318. install(FILES
  319. "${CMAKE_CURRENT_BINARY_DIR}/testLibRequiredConfig.cmake"
  320. "${CMAKE_CURRENT_BINARY_DIR}/testLibRequiredConfigVersion.cmake"
  321. DESTINATION lib/cmake/testLibRequired
  322. )
  323. # Install and export from install tree.
  324. install(
  325. TARGETS
  326. testExe1 testLib1 testLib2 testExe2 testLib3 testLib4 testExe3
  327. testExe2lib testLib4lib testLib4libdbg testLib4libopt
  328. testLib6
  329. testLibCycleA testLibCycleB
  330. cmp0022NEW cmp0022OLD
  331. EXPORT exp
  332. RUNTIME DESTINATION bin
  333. LIBRARY DESTINATION lib NAMELINK_SKIP
  334. ARCHIVE DESTINATION lib
  335. FRAMEWORK DESTINATION Frameworks
  336. BUNDLE DESTINATION Applications
  337. )
  338. if (APPLE)
  339. file(COPY testLib4.h DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/testLib4.framework/Headers)
  340. file(COPY testLib4.h DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/Debug/testLib4.framework/Headers)
  341. file(COPY testLib4.h DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/Release/testLib4.framework/Headers)
  342. install(FILES testLib4.h DESTINATION Frameworks/testLib4.framework/Headers)
  343. endif()
  344. install(
  345. TARGETS
  346. testExe2libImp testLib3Imp
  347. EXPORT exp
  348. RUNTIME DESTINATION bin
  349. LIBRARY DESTINATION lib/impl
  350. ARCHIVE DESTINATION lib/impl
  351. )
  352. install(
  353. TARGETS
  354. testLib3ImpDep
  355. EXPORT exp
  356. RUNTIME DESTINATION bin
  357. LIBRARY DESTINATION lib/impl/dep
  358. ARCHIVE DESTINATION lib/impl/dep
  359. )
  360. install(
  361. TARGETS testLib5
  362. EXPORT exp
  363. # Leave out RUNTIME DESTINATION to test implib-only export.
  364. LIBRARY DESTINATION lib
  365. ARCHIVE DESTINATION lib
  366. )
  367. install(EXPORT exp NAMESPACE exp_ DESTINATION lib/exp)
  368. # Install testLib5.dll outside the export.
  369. if(WIN32)
  370. install(TARGETS testLib5 RUNTIME DESTINATION bin)
  371. endif()
  372. add_subdirectory(sublib) # For CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE test.
  373. # Export from build tree.
  374. export(TARGETS testExe1 testLib1 testLib2 testLib3
  375. testExe2libImp testLib3Imp testLib3ImpDep subdirlib
  376. testSharedLibRequired testSharedLibRequiredUser testSharedLibRequiredUser2
  377. testSharedLibDepends renamed_on_export
  378. cmp0022NEW cmp0022OLD
  379. NAMESPACE bld_
  380. FILE ExportBuildTree.cmake
  381. )
  382. export(TARGETS testExe2 testLib4 testLib5 testLib6 testExe3 testExe2lib
  383. testLib4lib testLib4libdbg testLib4libopt
  384. testLibCycleA testLibCycleB
  385. NAMESPACE bld_
  386. APPEND FILE ExportBuildTree.cmake
  387. )