Ausführen eines bash-Befehls via CMake
Ich bin versucht zu haben CMake entweder drei bash-Befehle oder ein bash-Skript. Allerdings kann ich nicht scheinen, um es zu arbeiten.
Die bash-Befehle sind:
cd ${CMAKE_SOURCE_DIR}/dependencies/library
make
cd ${CMAKE_BINARY_DIR}
Im wesentlichen, ich möchte CMake bauen Sie die Bibliothek in das Verzeichnis, wenn es nicht bereits vorhanden ist.
Hier ist die CMake-code habe ich versucht:
if(NOT "${CMAKE_SOURCE_DIR}/dependencies/library/lib.o")
execute_process(COMMAND cd ${CMAKE_SOURCE_DIR}/dependencies/library)
execute_process(COMMAND make)
execute_process(COMMAND cd ${CMAKE_BINARY_DIR})
endif(NOT "${CMAKE_SOURCE_DIR}/dependencies/library/lib.o")
Es ist jedoch nicht, dort etwas zu bauen. Was mache ich falsch?
Auch, während ich hier diese Frage: sollte der Dritte Befehl, zu bewegen, um die binary-Ordner enthalten sein?
Dank!
- Erstens, warum bist Du nicht mit
WORKING_DIRECTORY
parameter anstelle dercd
Befehle?So etwas wieexecute_process(COMMAND make WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/dependencies/library)
. Ich nehme an,execute_process()
ruft nicht denselben Umgebung. Auch, wenn ich Sie wäre, würde ich check out theadd_custom_target()
undadd_custom_command()
für diese Art der Sache. - Ich kann nicht kommentieren, die meisten von dem, was @Kamiccolo gesagt, aber ich kann sagen, dass ich denke, die Details über
execute_process
nicht teilen, Zustand ist fast sicher richtig. Es ist unglaublich wahrscheinlich, dass diecd
im ersten Befehl wechselt das Verzeichnis nur für diesen Prozess und nicht für irgendwelche anderen. - Wenn Sie beabsichtigen, zu bauen, eine Drittanbieter-Bibliothek, Sie sind wahrscheinlich besser mit der ExternalProject - Modul.
Du musst angemeldet sein, um einen Kommentar abzugeben.
execute_process()
ausgeführt wird, während der configure-Zeit. Aber Sie wollen, dass diese Ausführung bei der build-Zeit, soadd_custom_command()
undadd_custom_target()
ist, was Sie suchen.In diesem speziellen Fall, den Sie erstellen möchten Sie eine Ausgabe-Datei, so dass Sie gehen sollten, für
add_custom_command()
(beide sind im wesentlichen die gleichen, abercommand
erzeugt eine oder mehrere Ausgabe-Dateien, währendtarget
nicht.Den cmake-snippet für diese sollte wie folgt Aussehen:
Müssen Sie dann fügen Sie die Ausgabe-Datei in ein anderes Ziel als Abhängigkeit, und alles sollte (hoffentlich) funktionieren wie erwartet.
Können Sie auch hinzufügen
DEPENDS
Aussagen zu denadd_custom_command()
Aufruf neu erstellen der Objekt-Datei in Fall einige Eingangsquellen geändert haben.