Erstellen Sie ein Tool sofort, damit es später in demselben CMake-Programm verwendet werden kann.

Ich habe ein interessantes Henne-Ei-Problem und eine mögliche Lösung dafür (siehe meine Antwort), aber diese Lösung verwendet CMake auf ungewöhnliche Weise. Bessere Alternativen oder Kommentare wären willkommen.

DAS PROBLEM

Die einfache Version des Problems kann als einzelnes CMake-Projekt mit den folgenden Merkmalen beschrieben werden:

Eines der Build-Ziele ist eine ausführbare Befehlszeile, die ich @ nennen werd mycomp, dessen Quelle sich in einem @ befindmycompdir und Änderungen am Inhalt dieses Verzeichnisses sind nicht möglich. Das Projekt enthält Textdateien (ich nenne siefoo.my undbar.my) welche brauchen mycomp Führen Sie sie aus, um eine Reihe von C ++ - Quellen und -Headern sowie einigeCMakeLists.txt -Dateien, die Bibliotheken definieren, die aus diesen Quellen erstellt wurden.Weitere Build-Ziele im selben Projekt müssen mit den Bibliotheken verknüpft werden, die von den generierten @ Bibliotheken definiert wurdeCMakeLists.txt Dateien. Diese anderen Ziele haben auch Quellen, die#include Einige der generierten Header.

Sie können sich vorstellen mycomp als so etwas wie ein Compiler und die Textdateien in Schritt 2 als eine Art Quelldatei. Dies stellt ein Problem dar, da CMake das @ benötigCMakeLists.txt Dateien zur Konfigurationszeit, aber mycomp ist erst zur Erstellungszeit verfügbar und daher nicht beim ersten Start verfügbar, um das @ zu erstelleCMakeLists.txt Dateien früh genug.

NICHT ANTWORT:

Normalerweise wäre eine auf ExternalProject basierende Superbuild-Anordnung eine mögliche Lösung, aber das oben Gesagte ist eine erhebliche Vereinfachung des eigentlichen Projekts, mit dem ich mich befasse, und ich habe nicht die Freiheit, den Build in verschiedene Teile aufzuteilen oder andere durchzuführen umfangreiche Umstrukturierungsarbeiten.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage