CMake 文档说明如下:
通过从依赖项中读取目标属性的 INTERFACE_ 变体并将值附加到操作数的非 INTERFACE_ 变体来传播使用要求。
这似乎是错误的。请看下面的最小示例:
cmake_minimum_required(VERSION 3.31.3)
project(main)
add_library(lib OBJECT lib.cpp)
set_property(TARGET lib PROPERTY INTERFACE_COMPILE_DEFINITIONS "DEFS")
add_executable(main main.cpp)
target_link_libraries(main PUBLIC lib)
function(print_property)
set(oneValueArgs TARGET PROPERTY)
cmake_parse_arguments(PARSE_ARGV 0 arg "" "${oneValueArgs}" "")
set(PROP "NONE")
get_property(PROP TARGET ${arg_TARGET} PROPERTY ${arg_PROPERTY})
message("${PROP}")
endfunction()
print_property(TARGET lib PROPERTY INTERFACE_COMPILE_DEFINITIONS)
print_property(TARGET lib PROPERTY COMPILE_DEFINITIONS)
print_property(TARGET main PROPERTY INTERFACE_COMPILE_DEFINITIONS)
print_property(TARGET main PROPERTY COMPILE_DEFINITIONS)
在配置阶段,只有第一条消息会打印一些内容(字符串DEFS
),其余消息则不打印任何内容。
问题:根据问题开头的引文,COMPILE_DEFINITIONS
的不应该main
用 填充吗?这个问题也与的有点相关。DEFS
INTERFACE_COMPILE_DEFINITIONS
main
建设阶段进展顺利 — —main.o
正在-DDEFS
按照预期进行建设。