You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何CMake目标属性未从依赖项属性填充?与文档描述存疑

CMake使用要求传播的属性显示疑问

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"字符串,其余均无输出。但构建阶段正常,main.o会以-DDEFS参数编译。

按照文档描述,main的COMPILE_DEFINITIONS是否应被填充为"DEFS"?main的INTERFACE_COMPILE_DEFINITIONS也存在类似疑问。

内容的提问来源于stack exchange,提问作者tntnkn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 23:30:54