66 lines
2.4 KiB
CMake
66 lines
2.4 KiB
CMake
cmake_minimum_required(VERSION 3.12...4.1)
|
|
project(link-libraries)
|
|
|
|
# Added in 4.1, enables transitive link libraries on LINK_LIBRARIES property
|
|
# https://cmake.org/cmake/help/v4.1/policy/CMP0189.html
|
|
# https://gitlab.kitware.com/cmake/cmake/-/issues/26709
|
|
# https://gitlab.kitware.com/cmake/cmake/-/merge_requests/10391
|
|
cmake_policy(SET CMP0189 NEW)
|
|
|
|
add_library(shared1 SHARED dummy.cpp)
|
|
add_library(shared2 SHARED dummy.cpp)
|
|
add_library(shared3 SHARED dummy.cpp)
|
|
add_library(interface1 INTERFACE)
|
|
add_library(interface2 INTERFACE)
|
|
add_library(interface3 INTERFACE)
|
|
add_library(interface4 INTERFACE)
|
|
add_library(static1 STATIC dummy.cpp)
|
|
add_library(static2 STATIC dummy.cpp)
|
|
|
|
add_library(lib1 STATIC dummy.cpp)
|
|
target_link_libraries(
|
|
lib1
|
|
PUBLIC shared1 interface1 static1
|
|
PRIVATE shared2 interface2 static2
|
|
INTERFACE interface3)
|
|
|
|
add_library(lib2 SHARED dummy.cpp)
|
|
target_link_libraries(lib2 shared3 interface3)
|
|
|
|
add_executable(exe1 dummy.cpp)
|
|
target_link_libraries(exe1 PRIVATE lib1 lib2 interface4)
|
|
|
|
add_executable(exe2 dummy.cpp)
|
|
target_link_libraries(exe2 lib1 lib2 interface4)
|
|
|
|
get_target_property(lib1_LINK_LIBRARIES lib1 LINK_LIBRARIES)
|
|
get_target_property(lib1_INTERFACE_LINK_LIBRARIES lib1 INTERFACE_LINK_LIBRARIES)
|
|
message(STATUS "lib1_LINK_LIBRARIES: ${lib1_LINK_LIBRARIES}")
|
|
message(STATUS "lib1_INTERFACE_LINK: ${lib1_INTERFACE_LINK_LIBRARIES}")
|
|
|
|
get_target_property(exe1_LINK_LIBRARIES exe1 LINK_LIBRARIES)
|
|
get_target_property(exe1_INTERFACE_LINK_LIBRARIES exe1 INTERFACE_LINK_LIBRARIES)
|
|
message(STATUS "exe1_LINK_LIBRARIES: ${exe1_LINK_LIBRARIES}")
|
|
message(STATUS "exe1_INTERFACE_LINK: ${exe1_INTERFACE_LINK_LIBRARIES}")
|
|
|
|
get_target_property(exe2_LINK_LIBRARIES exe2 LINK_LIBRARIES)
|
|
get_target_property(exe2_INTERFACE_LINK_LIBRARIES exe1 INTERFACE_LINK_LIBRARIES)
|
|
message(STATUS "exe2_LINK_LIBRARIES: ${exe2_LINK_LIBRARIES}")
|
|
message(STATUS "exe2_INTERFACE_LINK: ${exe2_INTERFACE_LINK_LIBRARIES}")
|
|
|
|
# https://stackoverflow.com/questions/51353110/how-do-i-output-the-result-of-a-generator-expression-in-cmake
|
|
file(
|
|
GENERATE
|
|
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/lib1_link_libraries.txt
|
|
CONTENT "$<TARGET_PROPERTY:lib1,LINK_LIBRARIES>")
|
|
file(
|
|
GENERATE
|
|
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/exe1_link_libraries.txt
|
|
CONTENT "$<TARGET_PROPERTY:exe1,LINK_LIBRARIES>")
|
|
file(
|
|
GENERATE
|
|
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/exe2_link_libraries.txt
|
|
CONTENT "$<TARGET_PROPERTY:exe2,LINK_LIBRARIES>")
|
|
|
|
# set_property(GLOBAL PROPERTY GLOBAL_DEPENDS_DEBUG_MODE 1)
|