gpt4 book ai didi

cmake - 在稍后定义的目标上调用 get_target_property()

转载 作者:行者123 更新时间:2023-12-04 02:00:08 40 4
gpt4 key购买 nike

我的 CMake 有问题 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 中使用的 header .

这失败并显示以下消息:
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 :

This command can get properties for any target so far created.



我也可以改变 add_directory 的顺序命令来解决这个问题。但这不是一个干净的解决方案。我该如何制作 get_target_property等到一切都被解析?

最佳答案

您可以随时使用 generator expressions如果您希望 CMake 在生成时而不是在配置时评估您的属性。

如果成功测试以下代码片段:

add_library(UT_pal_logger OBJECT ${SOURCES})
target_include_directories(
UT_pal_logger
PUBLIC "$<TARGET_PROPERTY:cppunit_addon,INTERFACE_INCLUDE_DIRECTORIES>"
)

关于cmake - 在稍后定义的目标上调用 get_target_property(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47865231/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com