在稍后定义的目标上调用get_target_property()
我遇到CMake get_target_property
问题。它在稍后定义的库上运行并返回错误。这是我的代码:在稍后定义的目标上调用get_target_property()
add_library(UT_pal_logger OBJECT ${SOURCES}) target_add_interfaces(UT_pal_logger cppunit_addon)
在其他文件有:
function(target_add_interfaces TARGET OTHER_TARGETS) foreach(OTHER_TARGET ${OTHER_TARGETS})
get_target_property(TMP_INCLUDES ${OTHER_TARGET} INTERFACE_INCLUDE_DIRECTORIES)
if(TMP_INCLUDES)
target_include_directories(${TARGET} PUBLIC ${TMP_INCLUDES})
endif()
endforeach(OTHER_TARGET)
endfunction()
和:
add_library(cppunit_addon STATIC ${SOURCES}) target_include_directories(cppunit_addon PUBLIC Include)
注意cppunit_addon
带来了在UT_pal_logger
使用一些头。
这失败的消息:
CMake Error at Scripts/CMake/target_add_interfaces.cmake:22 (get_target_property): get_target_property() called with non-existent target "cppunit_addon".
Call Stack (most recent call first):
.../logger/CMakeLists.txt:36 (target_add_interfaces)
但是这种配置和构建就好:
add_library(UT_pal_logger STATIC ${SOURCES}) target_link_libraries(UT_pal_logger cppunit_addon)
--->target_link_libraries
莫名其妙地等待,直到一切都被解析并get_target_property
没有。这也是documented:
此命令,可以获取属性迄今创建的任何目标。
我也可以更改add_directory
命令的顺序来解决这个问题。但这不是一个干净的解决方案。我怎么能让get_target_property
等到一切都被解析了?
回答:
如果您希望CMake在生成时评估您的财产,而不是在配置时间期间,您总是可以使用generator expressions。
如果成功地测试了下面的代码片断:
add_library(UT_pal_logger OBJECT ${SOURCES}) target_include_directories(
UT_pal_logger
PUBLIC "$<TARGET_PROPERTY:cppunit_addon,INTERFACE_INCLUDE_DIRECTORIES>"
)
以上是 在稍后定义的目标上调用get_target_property() 的全部内容, 来源链接: utcz.com/qa/262013.html