Die CMake manual for set_directory_properties
Ansprüche:Directory-Eigenschaften und Unterverzeichnisse
eine Eigenschaft für das aktuelle Verzeichnis und das Unter ein.
Dies deutet darauf hin, dass Eigenschaften in einem übergeordneten Verzeichnis auch auf alle Unterverzeichnisse vererbt werden sollten. Aber das scheint nicht der Fall zu sein. Bedenken Sie:
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})
Diese Drucke:
Property for a read from a:
Property for root directory root read from a: zort
Property read from root: zort
So ist die Eigenschaft nur r sein kann Aus dem Verzeichnis, in dem es festgelegt wurde, nicht die Unterverzeichnisse. Das gleiche gilt, wenn Sie die Eigenschaften set_directory_properties
/get_directory_properties
verwenden.
Habe ich den entsprechenden Abschnitt im Handbuch set_directory_properties
falsch interpretiert? Oder ist es einfach veraltet/falsch?
Wenn ich mir den Source-Code von CMake anschaue, dann hängt das von einem 'verketteten' Mitglied von 'cmPropertyDefinition' ab, dass es 'wahr' ist. Also ich habe nicht überprüft, ob Sie dies von außen einstellen können, aber haben Sie versucht, 'define_property (VERZEICHNIS-EIGENTUM narf INHERITED BRIEF_DOCS" "FULL_DOCS" ")' 'aufzurufen? Wahrscheinlich macht das Schlüsselwort "INHERITED" den Trick (auch wenn die "INHERITED" -Dokumentation besagt, dass es für etwas anderes verwendet wird). – Florian
@Florian wow, du hast Recht! Das hätte ich nie vermutet. Die INHERITED-Dokumentation bezieht sich nur auf Verkettung von Bereichstypen, nicht auf übergeordnete Bereiche desselben Typs. Sie sollten dies eine Antwort geben, es ist wichtig. – utopia