Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Kitware
GitHub Repository: Kitware/CMake
Path: blob/master/Tests/CMakeCommands/target_link_libraries/cmp0022/CMakeLists.txt
3165 views
1
include(GenerateExportHeader)
2
set(CMAKE_INCLUDE_CURRENT_DIR ON)
3
4
cmake_policy(SET CMP0022 NEW)
5
add_library(cmp0022lib SHARED cmp0022lib.cpp)
6
generate_export_header(cmp0022lib)
7
add_library(cmp0022ifacelib SHARED cmp0022ifacelib.cpp)
8
generate_export_header(cmp0022ifacelib)
9
target_link_libraries(cmp0022lib LINK_PUBLIC cmp0022ifacelib)
10
11
assert_property(cmp0022lib LINK_INTERFACE_LIBRARIES "")
12
assert_property(cmp0022ifacelib LINK_INTERFACE_LIBRARIES "")
13
assert_property(cmp0022lib INTERFACE_LINK_LIBRARIES "cmp0022ifacelib")
14
assert_property(cmp0022ifacelib INTERFACE_LINK_LIBRARIES "")
15
16
add_executable(cmp0022exe cmp0022exe.cpp)
17
target_link_libraries(cmp0022exe cmp0022lib)
18
19
# Test adding unquoted genex with ';' to LINK_LIBRARIES and INTERFACE_LINK_LIBRARIES.
20
target_link_libraries(cmp0022lib
21
PUBLIC $<0:imp::missing1;imp::missing2>
22
PRIVATE $<0:imp::missing3;imp::missing4>
23
INTERFACE $<0:imp::missing5;imp::missing6>
24
)
25
assert_property(cmp0022lib INTERFACE_LINK_LIBRARIES "cmp0022ifacelib;$<0:imp::missing1;imp::missing2>;$<0:imp::missing5;imp::missing6>")
26
assert_property(cmp0022lib LINK_LIBRARIES "cmp0022ifacelib;$<0:imp::missing1;imp::missing2>;$<0:imp::missing3;imp::missing4>")
27
28
add_library(staticlib1 STATIC staticlib1.cpp)
29
generate_export_header(staticlib1)
30
add_library(staticlib2 STATIC staticlib2.cpp)
31
generate_export_header(staticlib2)
32
target_link_libraries(staticlib1 LINK_PUBLIC staticlib2)
33
34
# Test adding LINK_ONLY to each of multiple specified libraries.
35
add_library(staticlib2iface1 INTERFACE)
36
add_library(staticlib2iface2 INTERFACE)
37
target_compile_definitions(staticlib2iface1 INTERFACE STATICLIB2_IFACE_1)
38
target_compile_definitions(staticlib2iface2 INTERFACE STATICLIB2_IFACE_2)
39
target_link_libraries(staticlib2 PRIVATE staticlib2iface1 staticlib2iface2)
40
41
# Test adding unquoted genex with ';' to LINK_LIBRARIES and INTERFACE_LINK_LIBRARIES.
42
target_link_libraries(staticlib2
43
PUBLIC $<0:imp::missing1;imp::missing2>
44
PRIVATE $<0:imp::missing3;imp::missing4>
45
INTERFACE $<0:imp::missing5;imp::missing6>
46
)
47
assert_property(staticlib2 INTERFACE_LINK_LIBRARIES "$<LINK_ONLY:staticlib2iface1>;$<LINK_ONLY:staticlib2iface2>;$<0:imp::missing1;imp::missing2>;$<LINK_ONLY:$<0:imp::missing3;imp::missing4>>;$<0:imp::missing5;imp::missing6>")
48
assert_property(staticlib2 LINK_LIBRARIES "staticlib2iface1;staticlib2iface2;$<0:imp::missing1;imp::missing2>;$<0:imp::missing3;imp::missing4>")
49
50
# Try adding a private link item to be propagated out of a static lib.
51
set(private_link "")
52
if (CMAKE_CXX_COMPILER_ID MATCHES GNU OR CMAKE_CXX_COMPILER_ID MATCHES Clang OR CMAKE_CXX_COMPILER_ID MATCHES LCC)
53
if (CMAKE_SYSTEM_NAME STREQUAL "SunOS")
54
set(private_link "-Wl,-V")
55
else()
56
set(private_link "-Wl,-v")
57
endif()
58
endif()
59
if(private_link)
60
target_link_libraries(staticlib1 LINK_PRIVATE "${private_link}")
61
endif()
62
63
add_executable(staticlib_exe staticlib_exe.cpp)
64
target_link_libraries(staticlib_exe staticlib1)
65
66
add_library(onlyplainlib1 SHARED onlyplainlib1.cpp)
67
add_library(onlyplainlib2 SHARED onlyplainlib2.cpp)
68
target_link_libraries(onlyplainlib2 onlyplainlib1)
69
70
add_executable(onlyplainlib_user onlyplainlib_user.cpp)
71
target_link_libraries(onlyplainlib_user onlyplainlib2)
72
73