The CMake 手册set_directory_properties claims:
设置当前目录和子目录的属性。
对我来说,这表明父目录中设置的属性也应该继承到所有子目录。但事实似乎并非如此。考虑:
CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(foo CXX)
set_property(DIRECTORY . PROPERTY narf "zort")
add_subdirectory(a)
get_property(res DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY narf)
message("Property read from root: " ${res})
a/CMakeLists.txt
get_property(res DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY narf)
message("Property for a read from a: " ${res})
get_property(res DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY narf)
message("Property for root directory root read from a: " ${res})
这打印:
Property for a read from a:
Property for root directory root read from a: zort
Property read from root: zort
因此该属性只能从设置它的目录中检索,而不能从子目录中检索。使用时也是如此set_directory_properties
/get_directory_properties
来处理属性。
我是否误解了相关部分set_directory_properties
手动的?或者它只是过时/错误的?
将我的评论变成答案
如果我查看 CMake 的源代码,这取决于chained
成员cmPropertyDefinition
是真实的。
因此,您可以使用以下方法为您自己的目录属性实现此目的INHERITED
关键字与define_property()
:
define_property(
DIRECTORY
PROPERTY narf
INHERITED
BRIEF_DOCS "Brief Doc"
FULL_DOCS "Full Doc"
)
即使INHERITED文档只说:
If the INHERITED
选项然后get_property()
当请求的属性未在给定命令的范围内设置时,命令将链接到下一个更高的范围。DIRECTORY
范围链到GLOBAL
. TARGET
, SOURCE
, and TEST
链至DIRECTORY
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)