的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 次 |
| 最近记录: |