为何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
相关产品推荐
相关产品推荐

