Laufen nur C-Präprozessor in cmake?
Ich versuche, cmake zur Vereinfachung der Weitergabe meiner OpenCL-Programm. Ich habe eine kernel-Datei, die mehrere Kopf-und anderen source-Dateien, und ich möchte eine einzelne, selbst enthaltenen ausführbaren.
Mein plan ist, cmake laufen die C Präprozessor auf die kernel-Quelle, drehen die cl-Datei und die enthält in einer einzigen Einheit, die ist einfacher, mit zu arbeiten.
Kann ich verwenden add_custom_command zu tun, es durch den Aufruf gcc/clang mit -E, aber dann habe ich nicht den Fahnen, um die richtigen Verzeichnisse zu finden, die verschiedenen header-Dateien in der Kommandozeile, und ich sehe nicht einen einfachen Weg zu finden, alle aktuelle include-Verzeichnisse für die Verwendung in den custom-Aufruf an den compiler.
Gibt es eine Möglichkeit nur die C Präprozessor auf eine Datei mit der aktuellen cmake Umgebung?
- diese Art von Dingen sollten in der Regel enthalten in der variable CPPFLAGS. versuchen Sie, Hinzugefügt, um Ihr gcc-Befehl. cmake möglicherweise eine spezielle variable, die, tryr CMAKE_CPP_FLAGS
- Wenn es keine solche variable definiert, die in Ihrer build-Konfiguration Sie können dann ersetzen Sie die complier mit einem Skript fügt hinzu, dass die notwendigen flags.
- Wenn ich das richtig verstehe, wie wäre es
cpp
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
CMake automatisch generiert make targets, die für die Vorverarbeitung von Dateien. Für jede
foo.c
im Projekt gibt es einefoo.i
make-target, das ausgeführt wird nur der Präprozessor (mit allen relevanten-D
und-I
flags etc.). Führen Siemake help
zu sehen, alle anderen potentiell nützliche Ziele, die CMake erzeugt die makefiles.BTW, ich kann nicht sehen, wie diese "Einheit" wird leichter sein, mit zu arbeiten für Sie.
Wird dies ein rohes hack, aber man kann Missbrauch add_definition für das,, wie "Dieser Befehl kann verwendet werden, um alle Flaggen, aber es war ursprünglich gedacht, zum hinzufügen von Präprozessor-Definitionen."
Alternativ könnte man einfach die COMPILE_FLAGS-Eigenschaft des Ziels auf "-E", die den gleichen Effekt erzielen, aber lokal auf das Ziel.
Ich würde vorschlagen, einen anderen Ansatz.
Bauen Sie Ihren kernel in einen binären (Beispiel für die ATI Stream: http://developer.amd.com/support/KnowledgeBase/Lists/KnowledgeBase/DispForm.aspx?ID=115 )
Kompilieren Sie diese binären Daten in das Programm (als char[] blob) und laden Sie es, wenn Ihr Programm startet.
Mit cmake und benutzerdefinierte Ziele, sollte dies Recht einfach sein.