2016-08-08 52 views
3

Ist es möglich mit cmake 2.6 (oder höher, wenn nicht in dieser Version möglich) zu prüfen, ob ein Include-Verzeichnis als SYSTEM markiert ist (z. B. kompilieren mit dem 0cc-Flag)?Cmake: Überprüfen, ob das System das Verzeichnis enthält

Zum Beispiel, bekomme ich die Include-Verzeichnisse des aktuellen Ziels mit:

GET_PROPERTY(_target_include_dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES) 

Wie kann ich wissen, welche davon als isystem gekennzeichnet sind?

Dank

Antwort

1

an der Quelle CMake Sehen, ob ein Verzeichnis mit include_directories hinzugefügt ist als SYSTEM markiert scheint in CMake Interna verfolgt zu werden, und ist für den Verbrauch in Ihrem CMakeLists.txt ¹ nicht zur Verfügung.

jedoch für die Ziel Eigenschaft INTERFACE_INCLUDE_DIRECTORIES (bevölkert von target_include_directories entweder mit PUBLIC oder INTERFACE), gibt es eine andere Zieleigenschaft INTERFACE_SYSTEM_INCLUDE_DIRECTORIES genannt:

add_library(testlib test.cc) 

target_include_directories(testlib SYSTEM INTERFACE /target_system) 

get_property(_system_include_dirs TARGET testlib PROPERTY INTERFACE_SYSTEM_INCLUDE_DIRECTORIES) 
message("System: ${_system_include_dirs}") 

So können Sie vielleicht, dass stattdessen verwenden.

¹ Es gibt eine SYSTEM_INCLUDE_DIRECTORIES Eigenschaft, die durch einen Generatorausdruck verfügbar ist, aber ich konnte es nicht zum Laufen bringen.