Path: blob/master/Tests/CMakeCommands/target_link_libraries/cmp0022/CMakeLists.txt
3165 views
include(GenerateExportHeader)1set(CMAKE_INCLUDE_CURRENT_DIR ON)23cmake_policy(SET CMP0022 NEW)4add_library(cmp0022lib SHARED cmp0022lib.cpp)5generate_export_header(cmp0022lib)6add_library(cmp0022ifacelib SHARED cmp0022ifacelib.cpp)7generate_export_header(cmp0022ifacelib)8target_link_libraries(cmp0022lib LINK_PUBLIC cmp0022ifacelib)910assert_property(cmp0022lib LINK_INTERFACE_LIBRARIES "")11assert_property(cmp0022ifacelib LINK_INTERFACE_LIBRARIES "")12assert_property(cmp0022lib INTERFACE_LINK_LIBRARIES "cmp0022ifacelib")13assert_property(cmp0022ifacelib INTERFACE_LINK_LIBRARIES "")1415add_executable(cmp0022exe cmp0022exe.cpp)16target_link_libraries(cmp0022exe cmp0022lib)1718# Test adding unquoted genex with ';' to LINK_LIBRARIES and INTERFACE_LINK_LIBRARIES.19target_link_libraries(cmp0022lib20PUBLIC $<0:imp::missing1;imp::missing2>21PRIVATE $<0:imp::missing3;imp::missing4>22INTERFACE $<0:imp::missing5;imp::missing6>23)24assert_property(cmp0022lib INTERFACE_LINK_LIBRARIES "cmp0022ifacelib;$<0:imp::missing1;imp::missing2>;$<0:imp::missing5;imp::missing6>")25assert_property(cmp0022lib LINK_LIBRARIES "cmp0022ifacelib;$<0:imp::missing1;imp::missing2>;$<0:imp::missing3;imp::missing4>")2627add_library(staticlib1 STATIC staticlib1.cpp)28generate_export_header(staticlib1)29add_library(staticlib2 STATIC staticlib2.cpp)30generate_export_header(staticlib2)31target_link_libraries(staticlib1 LINK_PUBLIC staticlib2)3233# Test adding LINK_ONLY to each of multiple specified libraries.34add_library(staticlib2iface1 INTERFACE)35add_library(staticlib2iface2 INTERFACE)36target_compile_definitions(staticlib2iface1 INTERFACE STATICLIB2_IFACE_1)37target_compile_definitions(staticlib2iface2 INTERFACE STATICLIB2_IFACE_2)38target_link_libraries(staticlib2 PRIVATE staticlib2iface1 staticlib2iface2)3940# Test adding unquoted genex with ';' to LINK_LIBRARIES and INTERFACE_LINK_LIBRARIES.41target_link_libraries(staticlib242PUBLIC $<0:imp::missing1;imp::missing2>43PRIVATE $<0:imp::missing3;imp::missing4>44INTERFACE $<0:imp::missing5;imp::missing6>45)46assert_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>")47assert_property(staticlib2 LINK_LIBRARIES "staticlib2iface1;staticlib2iface2;$<0:imp::missing1;imp::missing2>;$<0:imp::missing3;imp::missing4>")4849# Try adding a private link item to be propagated out of a static lib.50set(private_link "")51if (CMAKE_CXX_COMPILER_ID MATCHES GNU OR CMAKE_CXX_COMPILER_ID MATCHES Clang OR CMAKE_CXX_COMPILER_ID MATCHES LCC)52if (CMAKE_SYSTEM_NAME STREQUAL "SunOS")53set(private_link "-Wl,-V")54else()55set(private_link "-Wl,-v")56endif()57endif()58if(private_link)59target_link_libraries(staticlib1 LINK_PRIVATE "${private_link}")60endif()6162add_executable(staticlib_exe staticlib_exe.cpp)63target_link_libraries(staticlib_exe staticlib1)6465add_library(onlyplainlib1 SHARED onlyplainlib1.cpp)66add_library(onlyplainlib2 SHARED onlyplainlib2.cpp)67target_link_libraries(onlyplainlib2 onlyplainlib1)6869add_executable(onlyplainlib_user onlyplainlib_user.cpp)70target_link_libraries(onlyplainlib_user onlyplainlib2)717273