Ich habe eine Frage zu CMake, die hier häufig gestellt wird, aber keine der Antworten scheint mein Problem zu lösen.
Im Unterverzeichnis details
befindet sich ein CMakeLists.txt
, das Folgendes enthält:
Im Hauptverzeichnis befindet sich ein CMakeLists.txt
, das part.out
zum Erzeugen einer anderen Datei verwendet:
Das Problem ist, dass ich hier drei Dinge machen möchte:
part.out
nicht existiert, muss es generiert werden part.out
veraltet ist ( part.src
ist neuer als part.out
) Ich möchte, dass es neu generiert wird full.out
veraltet ist ( part.out
ist neuer als full.out
, oder full.out
existiert nicht) Ich möchte, dass es (re) generiert wird Wenn ich also DEPENDS ./details/part.out
zu add_custom_command(OUTPUT full.out)
hinzufüge, erreiche ich die Punkte 2 und 3, aber nicht Punkt 1, denn wenn ich part.out
lösche und dann make full_out
rufe, bekomme ich einen Fehler, den es gibt keine Regel, um ./details/part.out
zu machen (wie es eine Regel aus einem anderen Verzeichnis ist).
Wenn ich DEPENDS full_out
zu add_custom_command(OUTPUT full.out)
oder zu add_custom_target(full_out)
hinzufüge, erreiche ich die Punkte 1 und 2, aber nicht 3, denn auch wenn part.out
neu generiert wurde, wird ein full.out
nicht neu generiert Es hängt nicht von der part.out
-Datei selbst ab.
Wie kann ich also beide Szenarien verbinden?
Ich habe darüber nachgedacht, beide DEPENDS
hinzuzufügen, aber woher weiß ich, ob das immer funktioniert? Ich meine, in einem solchen Fall wird die Reihenfolge der Builds hier eine Rolle spielen.
CMake-Dokumente für add_custom_target
:
Standardmäßig hängt nichts vom benutzerdefinierten Ziel ab. Verwenden Sie ADD_DEPENDENCIES Abhängigkeiten zu oder von anderen Zielen hinzufügen.
Ich schlage also vor, die Ziele mit
zu verbinden %Vor%BEARBEITEN: Arbeitsbeispiel
Wie sich herausstellte, müssen Sie die Eigenschaften der Quelldatei für part.out
Hier ist mein Arbeitsbeispiel (versucht unter Windows mit VS2008):
CMakeLists.txt:
%Vor%Details / CMakeLists.txt:
%Vor%Dieses Beispiel hat für alle drei Fälle funktioniert.
Tags und Links cmake