的CMake的手册set_directory_properties
权利要求:
设置当前目录和子目录的属性。
对我来说,这建议在父目录中设置的属性也应继承到所有子目录。但这似乎并非如此。考虑:
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})
Run Code Online (Sandbox Code Playgroud)
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})
Run Code Online (Sandbox Code Playgroud)
打印:
Property for a read from a:
Property for root directory root read from a: zort
Property read from root: zort
Run Code Online (Sandbox Code Playgroud)
因此,只能从设置该属性的目录(而不是子目录)中检索该属性。当使用set_directory_properties
/ get_directory_properties
处理属性时,也是如此。
我是否误解了set_directory_properties
手册的相应部分?还是仅仅是过时/错误?
将我的评论变成答案
如果我查看 CMake 的源代码,这取决于chained
的成员cmPropertyDefinition
是否正确。
INHERITED
因此,您可以通过使用关键字 with来为您自己的目录属性实现此目的define_property()
:
define_property(
DIRECTORY
PROPERTY narf
INHERITED
BRIEF_DOCS "Brief Doc"
FULL_DOCS "Full Doc"
)
Run Code Online (Sandbox Code Playgroud)
即使INHERITED
文档只说:
如果该
INHERITED
选项,则get_property()
当请求的属性未在给定命令的范围内设置时,该命令将链接到下一个更高的范围。DIRECTORY
范围链到GLOBAL
.TARGET
、SOURCE
、 并TEST
链接到DIRECTORY
。
归档时间: |
|
查看次数: |
928 次 |
最近记录: |