cmake, add_custom_command mit Abhängigkeiten von einem anderen Verzeichnis

8

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:

%Vor%

Im Hauptverzeichnis befindet sich ein CMakeLists.txt , das part.out zum Erzeugen einer anderen Datei verwendet:

%Vor%

Das Problem ist, dass ich hier drei Dinge machen möchte:

  1. Wenn part.out nicht existiert, muss es generiert werden
  2. wenn part.out veraltet ist ( part.src ist neuer als part.out ) Ich möchte, dass es neu generiert wird
  3. wenn 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.

    
Michał Walenciak 20.11.2012, 09:50
quelle

1 Antwort

22

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

festlegen

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.

    
Johannes S. 20.11.2012, 13:20
quelle

Tags und Links