Wie initialisiere ich eine CMake-Variable mit dem Ergebnis eines Shell-Befehls?

78

Gibt es eine Möglichkeit, eine Variable in einem CMake-Skript auf die Ausgabe eines Shell-Befehls festzulegen? So etwas SET(FOO COMMAND "echo bar")würde mir in den Sinn kommen

Sasha
quelle

Antworten:

81

Sie wollen den execute_processBefehl.

In Ihrem Fall unter Windows:

execute_process(COMMAND CMD /c echo bar OUTPUT_VARIABLE FOO)

oder unter Linux einfach:

execute_process(COMMAND echo bar OUTPUT_VARIABLE FOO)


In diesem speziellen Fall bietet CMake eine plattformübergreifende Lösung. CMake kann selbst verwendet werden, um Befehle auszuführen, die auf allen Systemen verwendet werden können, von denen eines ist echo. Zu diesem Zweck sollte CMake das Befehlszeilenargument übergeben werden -E. Führen Sie die vollständige Liste dieser Befehle auscmake -E help

In einem CMake-Skript wird auf die ausführbare CMake-Datei verwiesen ${CMAKE_COMMAND}, daher muss das Skript Folgendes tun:

execute_process(COMMAND ${CMAKE_COMMAND} -E echo bar OUTPUT_VARIABLE FOO)
Fraser
quelle
12
Abhängig von dem Befehl, den Sie ausführen, werden möglicherweise nachgestellte Leerzeichen für die Variable festgelegt. Wenn dieses Verhalten nicht erwünscht ist, können Sie die Option OUTPUT_STRIP_TRAILING_WHITESPACE als letztes Argument für die Funktion 'execute_process' verwenden.
Hbobenicio
3
@hbobenicio OUTPUT_STRIP_TRAILING_WHITESPACEist mehr oder weniger erforderlich IMO
Trevor Boyd Smith
3
Wenn Ihr Befehl mehr als ein einfacher Programmaufruf ist, verwenden Sie COMMAND bash "-c" "your_complex.sh | command && stuff". Bildnachweis
YSC