Files
CMake/Tests/RunCMake/target_link_libraries-ALIAS/AliasTargets.cmake
T
Robert Maynard 7351d590ee cmTarget: Add a way to represent imported shared library stubs
Shared library stubs can be used for linking, but not at runtime.
Their role is similar to import libraries on Windows, so represent
their location with the `IMPORTED_IMPLIB` target property.

Fixes: #24940
2023-07-18 13:21:01 -04:00

43 lines
1.7 KiB
CMake

enable_language(C)
add_library (func SHARED func.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-local SHARED IMPORTED)
set_property(TARGET import-local PROPERTY IMPORTED_LOCATION "${binary_dir}/${CMAKE_STATIC_LIBRARY_PREFIX}func${CMAKE_SHARED_LIBRARY_SUFFIX}")
set_property(TARGET import-local PROPERTY IMPORTED_IMPLIB "${binary_dir}/${CMAKE_STATIC_LIBRARY_PREFIX}func${CMAKE_IMPORT_LIBRARY_SUFFIX}")
add_library(alias::local ALIAS import-local)
if(NOT DEFINED CMAKE_IMPORT_LIBRARY_SUFFIX)
add_library(import-local-stub SHARED IMPORTED)
set_property(TARGET import-local-stub PROPERTY IMPORTED_IMPLIB "${binary_dir}/${CMAKE_STATIC_LIBRARY_PREFIX}func${CMAKE_SHARED_LIBRARY_SUFFIX}")
add_library(alias::local-stub ALIAS import-local-stub)
endif()
add_library (lib-local SHARED lib.c)
target_link_libraries (lib-local PRIVATE alias::local $<TARGET_NAME_IF_EXISTS:alias::local-stub>)
add_executable (main-local main.c)
target_link_libraries (main-local PRIVATE alias::local)
add_library(import-global SHARED IMPORTED GLOBAL)
set_property(TARGET import-global PROPERTY IMPORTED_LOCATION "${binary_dir}/${CMAKE_STATIC_LIBRARY_PREFIX}func${CMAKE_SHARED_LIBRARY_SUFFIX}")
set_property(TARGET import-global PROPERTY IMPORTED_IMPLIB "${binary_dir}/${CMAKE_STATIC_LIBRARY_PREFIX}func${CMAKE_IMPORT_LIBRARY_SUFFIX}")
add_library(alias::global ALIAS import-global)
add_library (lib-global SHARED lib.c)
target_link_libraries (lib-global PRIVATE alias::global)
add_executable (main-global main.c)
target_link_libraries (main-global PRIVATE alias::global)
add_subdirectory(sub_dir)