gpt4 book ai didi

c++ - 接口(interface)类型的 CMake 3.0 add_library 中断 get_target_property

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:53:03 27 4
gpt4 key购买 nike

我想向我在 Windows 7 中使用 Visual Studio 2013 Update 2 的 cmake 项目添加一个仅 header 目录。我做了一些研究并提出了这个 Cmakelists.txt 文件:

add_library(AAA_lib INTERFACE)
target_include_directories(AAA_lib
INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
)

这似乎有效,但是在我们调用 get_target_property 的一些内部 cmake 代码中:

get_target_property(target_libraries ${target} LINK_LIBRARIES)

这会产生一个 CMake 错误:

CMake Error at x_common_libs/xml/xsdmap.cmake:41 (get_target_property):
INTERFACE_LIBRARY targets may only have whitelisted properties. The
property "LINK_LIBRARIES" is not allowed.

这似乎是一个奇怪的错误,因为 get 应该只返回具有适当属性的目标。这是 CMake 中的错误吗?还是有其他方法可以实现?

为什么我们需要调用get_target_property?我们有一个 cmake 辅助函数,它递归地遍历一个项目的所有依赖项,建立一个列表,列出所有需要一些自定义后处理的依赖项目。因此,如果项目 X 使用项目 B,C,C 使用 D,那么我们将获得 X、B、C、D 的列表,然后检查哪些目录符合要求,然后调用 custom_command。

谢谢,杰森

最佳答案

似乎是 CMake 错误。 CMake 3.0 中有一个名为 INTERFACE_LIBRARY 的新目标类型。您应该只使用这种类型的一些属性。但是,我不认为在读取其他属性时会引发错误。

我提出了以下解决方法:

get_target_property(_TARGET_TYPE ${target} TYPE)
if(_TARGET_TYPE STREQUAL "INTERFACE_LIBRARY")
unset(target_libraries)
else()
get_target_property(target_libraries ${target} LINK_LIBRARIES)
endif()

关于c++ - 接口(interface)类型的 CMake 3.0 add_library 中断 get_target_property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24926868/

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