2017-02-06 8 views
0

benötigen Hilfe bei der Verwendung eines Makefile von Drittanbietern, wenn Sie mein eigenes Projekt erstellen.einschließlich Makefile während der Verwendung von cmake

+0

"Ich habe Folgendes versucht, aber es funktioniert nicht ..." Wie funktioniert es nicht? Was hast du erwartet? Was ist passiert? – nega

+0

Sie müssen cmake sagen, wie das zu interpretieren ist, was das gmake + Makefile macht. CMake wird nicht nur einige zufällige Strings magisch importieren. Woher sollte es das richtig machen? Wie würde es das sicher machen? Vielleicht, wenn Sie ein Beispiel für die Ausgabe von gmake + makefile angegeben haben und was Sie mit dieser Ausgabe machen wollen? – nega

+0

was meinst du mit "machen"? nur auf dem Terminal drucken? Wiederaufbau Ihrer 3rd-Party-Bibliotheken mit diesen Flags? diese Flags in eine Datei schreiben? – nega

Antwort

1

Es gibt keinen Weg zu dem, was Sie direkt wollen. CMake bietet keine Möglichkeit, Dateien in die generierten Dateien einzuschließen. (dh: fügen Sie einen "3rdparty.mk" in einen CMake ein, der Makefile generiert wurde.) Sie können auch keinen "generated-file-type" (dh ein Makefile) in eine CMakeLists.txt einfügen. CMake's ExternalProject lassen Sie das auch nicht.

Was Sie tun müssen, ist irgendwie "parse" das Makefile, das die Information hat, die Sie wünschen. Es gibt eine Vielzahl von Möglichkeiten, wie Sie dies tun können. Zum Beispiel könnten Sie einen Shell-Skript-Wrapper schreiben, der Ihr Makefile für das, was Sie benötigen, greptet, dann eine Cmake-Befehlszeile mit den definierten Variablen erstellt und sie ausgibt oder cmake für Sie aufruft. Abhängig davon, wie komfortabel Sie mit Shell (oder Perl, Python, etc.) sind, könnten Sie denken, dass dies die beste Option ist.

Wenn Sie diese Werte nie (oder sehr selten) ändern, können Sie sie hart in Ihre CMakeLists.txt (nicht empfohlen) oder in eine Datei können Sie include() (besser).

Sie könnten auch in CMake-Land bleiben und CMake ExternalProject verwenden, um Ihnen zu helfen. ExternalProject verwenden, können Sie:

  1. Fetch Ihre 3rd-Party-Bibliotheken (herunterladen, kopieren, entpacken, usw.)
  2. Patch-Makefiles dieser Bibliotheken
  3. Run make auf diesen gepatcht Makefiles

Nun, dieser Patch, den ich erwähnt habe, müsste man selbst schreiben und bei der Quelle des Hauptprojekts bleiben. Der Inhalt dieses Patches wäre ein neues Ziel für make, das eine Datei schreiben würde, die Sie in Ihre CMakeLists.txt über include() schreiben könnten. Sie könnten einfach anfangen und dieses neue make-Ziel (z. B. make output_variables) eine Liste der set() Befehle an lib_A.cmake schreiben lassen. Wenn Sie damit zufrieden sind, können Sie zu einer komplizierteren Ausgabe wechseln. wie das Schreiben einer lib_A-config.cmake Datei, die CMake find_package() würde verstehen.

Zugegeben, die letzte Option ist wahrscheinlich die komplizierteste, aber es könnte die Wartung Ihres primären Projekts erleichtern und die Schmerzen in Zukunft reduzieren. Sie werden auch ein tieferes Verständnis von CMake erlangen.

Verwandte Themen