2016-06-03 2 views
8

Gibt es eine sinnvolle Möglichkeit, eine CMake-Variable mit dem Build-Befehl oder alle Compiler-Flags zu erhalten, die CMake mit einem Ziel verbinden wird?Get Build-Befehl oder alle Compiler-Flags, die verwendet werden, um ein Ziel zu erstellen

Es scheint nicht praktisch zu sein, eine Liste aller Eigenschaften zu sammeln und zu verwalten, die Flags hinzufügen können. Außerdem muss CMake diese Information irgendwo haben, da es schließlich ein Build-System generieren muss.

Vom CMake docs sieht es aus wie diese Funktion einmal existierte und wurde zur Verfügung gestellt von build_command() Aufruf aber das ersetzt wurde:

Hinweis CMake-Versionen vor 3.0 dieser Befehl zurück einen Befehl Zeile, die direkt die native ruft Bauwerkzeug für den aktuellen Generator .

Gibt es einen neuen Befehl, der das alte Verhalten von build_command() gibt?

+0

Siehe z [Wie verwendet man CMAKE_EXPORT_COMPILE_COMMANDS?] (Https://stackoverflow.com/questions/20059670/how-to-use-cmake-export-compile-commands) oder [Alle Link-Flags in CMake abrufen] (https: // stackoverflow. com/fragen/34165365/retrieve-all-link-flags-in-cmake). Können Sie bitte genauer angeben, was Sie mit der Befehlszeile oder allen Compiler-Flags machen möchten? Wenn Sie z.B. Visual Studio-Lösungen und -Projekte gibt es vielleicht gar nicht so etwas wie eine Kommandozeile inkl. Compiler-Flags. – Florian

Antwort

0

Build-Flags sind tatsächlich Quelldateien zugeordnet, da Sie unterschiedliche Flags für verschiedene Dateien haben können. Auf der anderen Seite sind diese Flags in den meisten Fällen äquivalent.

Anyways, erhalten alle Flaggen für eine Quelldatei erstellen können Sie COMPILE_FLAGS Eigenschaft:

get_source_file_property(RESULT file.cpp COMPILE_FLAGS) 
+3

Die Eigenschaft 'COMPILE_FLAGS' eines Ziels oder einer Quelle, die in diesem Ziel verwendet wird, wird nicht für die vollständige Liste der Build-Flags ausgewertet, die verwendet werden. Ich habe das gerade auf einem Ziel ausprobiert, um sicher zu gehen, und die Eigenschaft 'COMPILE_FLAGS' ist kein Ereignis, wenn Eigenschaften wie' INCLUDE_DIRECTORIES' und 'COMPILE_DEFINITIONS' gesetzt sind. Das gleiche gilt für eine zufällige Quelldatei, die in einem Ziel verwendet wird. Wie die CMake-Dokumentation sagt, sieht es so aus, als ob "COMPILE_FLAGS" für "zusätzliche" Flags ist - es wertet nicht alle Flags aus, die verwendet werden. – Praxeolitic

Verwandte Themen