2 Stimmen

Führen Sie execute_process erneut bei einer Dateiänderung aus

Ich suche nach einer Möglichkeit, CMake dazu zu bringen, jedes Mal, wenn es feststellt, dass sich die Abhängigkeiten für ein bestimmtes Ziel/ausführbare Datei geändert haben, ein Shell-Befehl erneut auszuführen. Ich habe versucht, einen benutzerdefinierten Befehl hinzuzufügen, der von einem Ziel abhängig ist, aber das scheint nicht zu funktionieren.

Beispiel, was ich dachte, könnte funktionieren:

ADD_CUSTOM_COMMAND(
           OUTPUT temp
           DEPENDS my_Target
           COMMAND ./some_command.sh)

Irgendwelche Vorschläge für einen Befehl, der in der Lage sein könnte, einen Befehl auszuführen, wenn eine Änderung der Abhängigkeit für ein Ziel festgestellt wurde. Oder noch besser, wenn wir eine Änderung in spezifischen Dateien überprüfen können.

0voto

steveire Punkte 10334

Von Ihrer Beschreibung her scheint es, als ob Sie dies möchten:

cmake_minimum_required(VERSION 2.8)
project(cmaketest)

add_custom_command(OUTPUT some_file.cpp
  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bar.cpp 
  COMMAND ${CMAKE_COMMAND} -E copy 
      ${CMAKE_CURRENT_SOURCE_DIR}/bar.cpp
      ${CMAKE_CURRENT_BINARY_DIR}/some_file.cpp
  VERBATIM
)

add_executable(mn main.cpp some_file.cpp)

Fügen Sie die Ausgabedatei in die Quellliste des Ziels ein, von dem sie abhängt.

-3voto

arrowd Punkte 31607

add_custom_command() verwendet eine einfache Überprüfung der Existenz der Datei OUTPUT, um zu bestimmen, ob der Befehl ausgeführt werden soll. Wenn sie nicht existiert, führt CMake dann make my_Target aus und führt erst dann Ihren Befehl aus. Gleichzeitig führt CMake nichts aus, wenn OUTPUT existiert.

Um zu erreichen, was Sie möchten, müssen Sie add_custom_target() (wahrscheinlich mit dem Schlüsselwort ALL, um ihn mit make auszuführen) hinzufügen und die Überprüfung auf Änderungen in Ihrer some_command.sh implementieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X