mirror of
https://github.com/Kitware/CMake.git
synced 2026-11-06 05:16:58 +00:00
Introduce new properties which allow target-specific wrapping of compile and link commands with arbitrary command lines. This is similar to the existing compiler and linker launchers, except the new `INTERFACE` compile and link wrappers allows expression as usage requirements. Wrappers are more flexible than launchers with regard to having multiple belonging to a given target, either from the target itself or dependent(s). In such cases, wrappers precede launchers on the resulting command line (so as to not interfere with tools like `ccache`), and are sorted lexicographically by the name of the corresponding CMake global property containing their value. Co-authored-by: Joseph Snyder <joseph.snyder@kitware.com> Issue: #27402, #28110 Fixes: #27598
17 lines
816 B
CMake
17 lines
816 B
CMake
include(common.cmake)
|
|
enable_language(C)
|
|
set(CMAKE_VERBOSE_MAKEFILE TRUE)
|
|
string(REPLACE "${CMAKE_START_TEMP_FILE}" "" CMAKE_C_COMPILE_OBJECT "${CMAKE_C_COMPILE_OBJECT}")
|
|
string(REPLACE "${CMAKE_END_TEMP_FILE}" "" CMAKE_C_COMPILE_OBJECT "${CMAKE_C_COMPILE_OBJECT}")
|
|
string(REPLACE "${CMAKE_START_TEMP_FILE}" "" CMAKE_C_LINK_EXECUTABLE "${CMAKE_C_LINK_EXECUTABLE}")
|
|
string(REPLACE "${CMAKE_END_TEMP_FILE}" "" CMAKE_C_LINK_EXECUTABLE "${CMAKE_C_LINK_EXECUTABLE}")
|
|
|
|
# `$<LINK_ONLY:...>` dependencies contribute only their link usage
|
|
# requirements, so `iface`'s INTERFACE_LINK_WRAPPERS apply to `main`
|
|
# but its INTERFACE_COMPILE_WRAPPERS do not.
|
|
add_library(link_only INTERFACE)
|
|
target_link_libraries(link_only INTERFACE "$<LINK_ONLY:iface>")
|
|
|
|
add_executable(main main.c)
|
|
target_link_libraries(main PRIVATE link_only)
|