| |
| cmake_minimum_required(VERSION 3.16...3.17) |
| |
| enable_language(C) |
| enable_language(CXX) |
| |
| add_library(shared_C SHARED func.c) |
| add_library(shared_CXX SHARED func.cxx) |
| |
| |
| add_library(static1_C STATIC empty.c) |
| target_link_libraries (static1_C INTERFACE $<$<LINK_LANGUAGE:C>:shared_C>) |
| |
| add_library(static2_C STATIC empty.c) |
| target_link_libraries (static2_C PRIVATE $<$<LINK_LANGUAGE:C>:shared_C>) |
| |
| |
| set (binary_dir "${CMAKE_BINARY_DIR}") |
| get_property (is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) |
| if (is_multi_config) |
| string (APPEND binary_dir "/Release") |
| endif() |
| add_library(import STATIC IMPORTED) |
| set_property(TARGET import PROPERTY IMPORTED_LOCATION "${binary_dir}/${CMAKE_STATIC_LIBRARY_PREFIX}static1_C${CMAKE_STATIC_LIBRARY_SUFFIX}") |
| target_link_libraries (import INTERFACE $<$<LINK_LANGUAGE:C>:shared_C>) |
| target_link_libraries (import INTERFACE $<$<LINK_LANGUAGE:CXX>:shared_CXX>) |
| |
| |
| add_library(interface INTERFACE) |
| target_link_libraries (interface INTERFACE $<$<LINK_LANGUAGE:C>:shared_C> |
| $<$<LINK_LANGUAGE:CXX>:shared_CXX>) |
| |
| |
| add_library(interface2 INTERFACE) |
| target_link_libraries (interface2 INTERFACE import) |
| |
| |
| add_library(static3 STATIC empty.c) |
| target_link_libraries (static3 PRIVATE interface) |
| |
| |
| add_library(LinkLibraries_lib SHARED lib.c) |
| target_link_libraries (LinkLibraries_lib PRIVATE $<$<LINK_LANGUAGE:C>:shared_C>) |
| |
| add_library(LinkLibraries_lib2 SHARED lib.c) |
| target_link_libraries (LinkLibraries_lib2 PRIVATE $<$<LINK_LANGUAGE:C>:static1_C>) |
| |
| add_library(LinkLibraries_lib3 SHARED lib.c) |
| target_link_libraries (LinkLibraries_lib3 PRIVATE $<$<LINK_LANGUAGE:C>:static2_C>) |
| |
| add_executable(LinkLibraries_exe main.c) |
| target_link_libraries (LinkLibraries_exe PRIVATE $<$<LINK_LANGUAGE:C>:shared_C>) |
| |
| add_executable(LinkLibraries_C_import main.c) |
| target_link_libraries (LinkLibraries_C_import PRIVATE import) |
| add_executable(LinkLibraries_CXX_import main.cxx) |
| target_link_libraries (LinkLibraries_CXX_import PRIVATE import) |
| |
| add_executable(LinkLibraries_C_interface main.c) |
| target_link_libraries (LinkLibraries_C_interface PRIVATE interface) |
| add_executable(LinkLibraries_CXX_interface main.cxx) |
| target_link_libraries (LinkLibraries_CXX_interface PRIVATE interface) |
| |
| add_executable(LinkLibraries_C_interface2 main.c) |
| target_link_libraries (LinkLibraries_C_interface2 PRIVATE interface2) |
| add_executable(LinkLibraries_CXX_interface2 main.cxx) |
| target_link_libraries (LinkLibraries_CXX_interface2 PRIVATE interface2) |
| |
| add_executable(LinkLibraries_C_static main.c) |
| target_link_libraries (LinkLibraries_C_static PRIVATE static3) |
| add_executable(LinkLibraries_CXX_static main.cxx) |
| target_link_libraries (LinkLibraries_CXX_static PRIVATE static3) |