Ich versuche CMake entweder drei Bash-Befehle oder ein Bash-Skript auszuführen. Aber ich kann es nicht zur Arbeit bringen.Ausführen eines Bash-Befehls über CMake
Die bash Befehle sind:
cd ${CMAKE_SOURCE_DIR}/dependencies/library
make
cd ${CMAKE_BINARY_DIR}
Wesentlichen würde ich CMake wie die Bibliothek in diesem Verzeichnis zu bauen, wenn es nicht bereits vorhanden ist.
Hier ist der CMake Code, den 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")
Allerdings ist es nicht etwas zu bauen. Was mache ich falsch?
Auch, während ich hier frage: Soll der dritte Befehl, in den Binärordner zu wechseln, enthalten sein?
Danke!
Zuerst warum verwenden Sie nicht 'WORKING_DIRECTORY' Parameter anstelle dieser' cd' Befehle? Etwas wie 'execute_process (COMMAND machen WORKING_DIRECTORY $ {CMAKE_SOURCE_DIR}/Abhängigkeiten/Bibliothek)'. Ich nehme an, 'execute_process()' Anrufe teilen nicht die gleiche Umgebung. Auch, wenn ich Sie wäre, würde ich die ['add_custom_target()'] (http://www.cmake.org/cmake/help/v3.0/command/add_custom_target.html?highlight=add_custom_target) überprüfen und ['add_custom_command()'] (http://www.cmake.org/cmake/help/v3.0/command/add_custom_command.html?highlight=add_custom_command) für diese Art von Dingen. – Kamiccolo
Ich kann das meiste von dem, was @Kamiccolo gesagt hat, nicht kommentieren, aber ich kann sagen, dass ich denke, dass die Details über 'execute_process', die nicht den Status teilen, ziemlich genau sind. Es ist * unglaublich * wahrscheinlich, dass das 'cd' im ersten Befehl das Verzeichnis nur für diesen Prozess und nicht für andere ändert. –
Wenn Sie eine Drittanbieterbibliothek erstellen möchten, verwenden Sie das Modul [ExternalProject] (http://www.cmake.org/cmake/help/v3.0/module/ExternalProject.html) wahrscheinlich besser. – sakra