2016-05-23 5 views
0

Ich möchte ein Top-Level benutzerdefinierte Ziel haben, und verschachtelte Submodule, die in der Lage sind, dieses bereits existierende Ziel zu erweitern, indem Sie/custom_command hinzufügen. Jetzt stehe ich vor einem Problem: Wenn add_custom_command(TARGET target_name ...) nicht in einer Datei verwendet wird, in der das Ziel definiert ist (das Ziel wird auf CMakeLists.txt auf oberster Ebene definiert), wird dieser custom_command einfach ignoriert.cmake binde benutzerdefinierten Befehl an ein existierendes Top-Level-Ziel fehlschlägt

Details:

1) custom_target auf der obersten Ebene erstellt CMakeLists.txt

cmake_minimum_required(VERSION 2.8) 

add_custom_target(custom_tg 
COMMAND ls > custom_target.txt 
) 

add_custom_command(TARGET custom_tg 
COMMAND ls > custom_command1.txt 
) 

add_subdirectory(sub) 

2) im Unterverzeichnis "sub" gibt es andere CMakeLists.txt (Modul) was ich gehofft habe ist in der Lage das existierende Ziel mit einem benutzerdefinierten Befehl zu erweitern.

add_custom_command(TARGET custom_tg 
COMMAND ls > custom_command2.txt 
) 

3) Wenn ich Verzeichnis erstellen bauen und

cmake .. && make custom_tg 

die Ausgabedateien sind custom_target.txt und custom_command1.txt laufen, aber es gibt keine custom_command2.txt und das ist eigentlich mein Problem.

Wenn ich sehe in build/CMakeFiles/custom_tg.dir/build.make Ich sehe keine Erwähnung über custom_command2.txt dort. Hier ist Inhalt von build.make Datei: http://pastebin.com/zVVS4sYL.

Eigentlich finde ich kann keine Erwähnung über custom_command2.txt in Baum von Dateien, die von CMake erzeugt, und dies scheint mir seltsam.

Wir freuen uns auf Ihre Hilfe.

Antwort

0

Dies wird normalerweise gelöst, indem Abhängigkeiten zwischen Zielen konstruiert werden. Für jeden Befehl in einem Ihrer Unterverzeichnisse würden Sie zunächst den 'lokalen' Befehl/das Ziel hinzufügen und dann eine Abhängigkeit für die oberste Ebene festlegen. Dadurch wird cmake gezwungen, alle "lokalen" Ziele auszuführen, bevor das oberste ausgeführt wird.

+0

Sorry, sicher, es ist akzeptiert, ich habe versucht, es zu bewerten, aber ich habe Nachricht "Danke für das Feedback! Sobald Sie insgesamt 15 Ruf verdienen, werden Ihre Stimmen die öffentlich angezeigte Post-Score ändern" –

+0

Das ist upvoting. Sehen Sie sich https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work an – renemilk

Verwandte Themen