Wie man CMake zeigen, Header -, die nicht Teil der binary-Ziel-in der IDE?
In unseren workflow haben wir einen Modul A das ist aus mehreren header-Dateien, Modul A nicht produzieren jede binäre (Anmerkung: es wird offensichtlich sein, für andere Module, das sind einige der überschriften aus Modul A zu produzieren binaries).
Ein gutes Beispiel wäre eine header-only-Bibliothek, für die CMake 3 stellt eine gute Unterstützung durch den Begriff der INTERFACE
- Bibliothek (siehe diese SO beantworten, und CMake ist Dokumentation der Funktion).
Können wir ein interface Bibliothek das Ziel aus Modul A:
add_library(module_A INTERFACE)
Gibt uns all die schönen features von CMakes Ziele (es ist möglich, verwenden Sie es als ein weiteres Ziel die Abhängigkeit, um es zu exportieren, um transitiv vorwärts Anforderungen etc.)
Aber in diesem Fall werden die überschriften in Modul A nicht zeigen, bis in unsere IDE (Xcode, aber wir erwarten, dass es das gleiche mit den meisten/alle anderen IDE).
Erweist sich das als einen großen Nachteil im workflow, da brauchen wir die Dateien Komponieren Modul A gezeigt werden in der IDE für die edition. Ist es möglich das zu erreichen ?
- Ah mein Kommentar gelöscht. Gute Frage.
- Vielen Dank für Ihr Interesse an der Frage, und Ihre Anregung. Leider ist die
INTERFACE
formadd_library
Befehl nicht erwarten, dass alle Datei-argument (siehe die Letzte form in der Dokumentation). In der Tat, wir brauchen also nicht unbedingt eineINTERFACE
, aber das ist der einzige änderbar non-binary-Ziel sind wir uns bewusst. [Für den Kontext, IdeaHat Frage mich, ob wir könnten den header-Dateien deradd_library
Befehl in seinerINTERFACE
form] - Einen hack Weg wäre, um eine dummy-custom target (nie gebaut, oder keine build-Schritte) mit diesen Dateien als Quelle...für meine persönliche Bildung, haben Sie einen link zu CMake, die definition verändert?
- Ich werde sehen, dass Konzept, die Vereinbarung würde es der hackish Weg ; ) in Bezug auf den Begriff der Ziel-Veränderlichkeit, ich habe nicht gefunden, eine definition in der Dokumentation, aber durch Ableitung von die Pseudo-Ziele Dokumentation, meine Vermutung wäre, dass: ein veränderliches Ziel haben können (zumindest teilweise) seine Eigenschaften geschrieben. [einige der bezieht sich auf den Begriff der "weissen Liste" Eigenschaften, zB. die Begrenzung, welche Eigenschaften geschrieben werden können, auf eine
INTERFACE
]. - Ja...ich bin nicht wirklich sicher, was die interface-Bibliothek gibt, die Sie über den add-target, außer dass Sie mehr semantisch korrekt. Meine Erfahrung mit CMake bisher hat es immer funktioniert, aber dein build-Skripte oft am Ende ein wenig hackaliscous, wenn Sie es wollen, um gut zu funktionieren 🙁
- Die aufgenommenen unter feature request cmake.org/Bug/view.php?id=15234
- Könnten Sie das Ziel konfigurieren irgendwie mit der add_custom_target Befehl? Ich bin mir nicht sicher, dass ich alle verstehen, die details in Ihrer Umsetzung, aber diese eine nützliche Methode, IMHO, zu erweitern, die CMake-Funktionen. Sie können jederzeit kombinieren Sie diese CMake-Befehl mit dem Befehl Linie CMake ausführbare Datei kopieren, verschieben oder löschen Sie Quelle, um die Dateien.
- FWIW, hier ist der link zum feature-request in Ihrer neuen tracker gitlab.kitware.com/cmake/cmake/issues/15234
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mehrere Monate auf der ganzen Linie, ich habe nicht einen Weg finden, um direkt die Liste der header-Dateien für eine
INTERFACE
Bibliothek.Da die Frage immer noch einige Ansichten, hier ist, was ich am Ende tun (d.h., was angezeigt wird, wie die weniger hack derzeit verfügbar).
Vorstellen Modul A ist ein header, der nur die Bibliothek. In der CMakeLists.txt erklärt seine Zielgruppe:
Akzeptiere ich nicht beantworten, da ich erwarte, dass weitere Versionen von CMake bieten eine semantisch korrekte Ansatz, die dann angenommen werden : )
Können Sie mit der neuen
target_sources
Befehl CMake 3.1.Es ist auch transitiv.
http://www.cmake.org/cmake/help/v3.1/command/target_sources.html#command:target_sources
Die Einschränkung, nicht in der Lage zu exportieren Ziele, die INTERFACE_SOURCES aufgehoben wurde, für CMake 3.3.