2017-07-03 7 views
2

CMake manual for set_directory_properties請求:Directoryのプロパティとサブディレクトリ

現在のディレクトリとサブディレクトリのプロパティを設定します。

私にとって、これは、親ディレクトリに設定されたプロパティもすべてのサブディレクトリに継承されるべきであることを示しています。しかし、これはそうではないようです。考えてみましょう:

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 

だからプロパティはRのみ可能それが設定されたディレクトリから取得され、サブディレクトリではありません。プロパティを処理するのに set_directory_properties/ get_directory_propertiesを使用する場合も同様です。

set_directory_propertiesマニュアルのそれぞれのセクションを誤って解釈しましたか?それとも単に古い/間違っていますか?

+2

私がCMakeのソースコードを見ると、これは 'cmPropertyDefinition'の' chained'メンバーが 'true'に依存しています。だから私はあなたが外側からこれを設定できるかどうかチェックしていないが、 'define_property(DIRECTORY PROPERTY narf INHERITED BRIEF_DOCS" "FULL_DOCS" ")'を呼び出そうとしましたか?おそらく 'INHERITED'キーワードはトリックを行います(INHERITEDドキュメンテーションがそれが他のものに使われていると言っても)。 – Florian

+0

@Florianうわー、そうですよ!私はそれを決して推測していないだろう。 INHERITEDドキュメントは、同じタイプの親スコープではなく、連鎖スコープタイプのみを参照します。これを答えにする必要があります、それは重要です。 – utopia

答えて

2

私はcmakeののソースコードを見れば、これは真実であることをcmPropertyDefinitionchainedメンバーに依存

答えに私のコメントを回します。

だからdefine_property()INHERITEDキーワードを使用して、独自のディレクトリのプロパティのためにこれを達成することができます

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

INHERITED documentationだけ言っても:

場合、INHERITEDオプションget_property()コマンド要求されたプロパティがコマンドに与えられたスコープ内に設定されていないときは、次に高いスコープにチェーンします。 DIRECTORYスコープチェーンはGLOBALになります。 TARGET,SOURCEおよびTESTからDIRECTORYへの鎖。

関連する問題