我想添加一个标头目录到一个cmake项目,我在Windows 7中使用的Visual Studio 2013 Update 2。我做了一些研究,并提出了这个Cmakelists.txt文件:
add_library(AAA_lib INTERFACE)
target_include_directories(AAA_lib
INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
)
这看起来是可行的,但是在我们的一些内部cmake代码中,我们称之为get_target_property:
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中的bug吗?还是应该用其他方法来实现?
为什么我们需要调用get_target_property?我们有一个cmake helper函数,它递归地遍历一个项目的所有依赖项,建立一个需要一些自定义后处理的所有依赖项目的列表。因此,如果项目X使用项目B和C,而C使用D,那么我们会得到一个X,B,C,D的列表,然后检查哪些目录符合要求,然后调用custom_command。
谢谢你,杰森
2条答案
按热度按时间x33g5p2x1#
似乎是CMake bug。CMake 3.0中有一个新的目标类型,名为INTERFACE_LIBRARY。您应该只使用该类型的一些属性。但是,我不认为在阅读其他属性时会引发错误。
我提出了以下解决方案:
8yparm6h2#
这是在CMake 3.19中取消的限制。
有关详细信息,请参见https://gitlab.kitware.com/cmake/cmake/-/issues/19145。