目录属性和子目录

时间:2017-07-03 12:44:45

标签: cmake

CMake manual for 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})

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手册中的相应部分?或者它只是过时/错误?

1 个答案:

答案 0 :(得分:4)

将我的评论转化为答案

如果我查看CMake的源代码,这取决于chained成员cmPropertyDefinition是否为真。

因此,您可以使用INHERITED关键字define_property()来为您自己的目录属性实现此目的:

define_property(
    DIRECTORY 
    PROPERTY narf 
    INHERITED 
    BRIEF_DOCS "Brief Doc" 
    FULL_DOCS "Full Doc"
)

即使INHERITED documentation只说:

  

如果INHERITED选项,则get_property()命令将在命令的作用域中未设置请求的属性时链接到下一个更高的作用域。 DIRECTORY范围链到GLOBALTARGETSOURCETEST链到DIRECTORY