SWIG generiert Wrapper-Code von Ihrem C / C ++ in einer gewünschten Zielsprache (Python, Java, C # usw.) unter Verwendung einer Interface-Datei (.i), die den einzugebenden Eingabecode wie in SWIG-Tutorial . CMake kann verwendet werden, um swig aufzurufen, um Zielcode von der .i-Schnittstelle zu generieren, wie im SWIG beschrieben Dokumentation .
Bei Verwendung dieser Methode generiert CMake jedoch nur eine Abhängigkeit für die Schnittstellendatei selbst, aber nicht für die darin enthaltenen Quelldateien. Man kann manuell Abhängigkeiten hinzufügen , aber SWIG kann Abhängigkeiten automatisch mit der Option -MM generieren, und ich möchte, dass diese von CMake genutzt werden.
Es gab ein Commit für CMake , das Abhängigkeiten verwendete, die von swig -MM
, aber es wurde später zurückgesetzt aufgrund eines Problems mit generierten Quellen, die zum Zeitpunkt des Aufrufs nicht vorhanden waren schlürfen Zu diesem Zeitpunkt scheint das Problem ungelöst zu bleiben.
Also stelle ich das Problem der brillanten StackOverflow-Community: Gibt es einen Weg mit dem aktuellen CMake, Abhängigkeiten zu nutzen, die von swig -MM
erzeugt werden, wenn die Interface-Datei (a ) enthält keinen generierten Code (zB config.h), und (b) enthält generierten Code?
Hier ist ein kleines Beispiel, das zum Experimentieren verwendet werden kann ( hier herunterladen ) ).
%Vor% %Vor% %Vor% %Vor% Kompilieren Sie es einmal, dann kommentieren Sie die Deklaration von another_function
und versuchen Sie erneut zu kompilieren. Da die SWIG-Schnittstelle nicht neu generiert wird, tritt beim Versuch, examplePYTHON_wrap.cxx zu kompilieren, ein Fehler auf.
Entfernen Sie die Kommentarzeichen für manuelle Abhängigkeiten hinzufügen der CMakeLists.txt und die Schnittstelle wird ordnungsgemäß neu generiert. Ich möchte jedoch, dass dies funktioniert, indem Abhängigkeiten verwendet werden, die von swig -MM
generiert werden, anstatt Abhängigkeiten manuell angeben zu müssen.
Aus meinen Kommentaren eine Antwort machen
Ich denke nicht - wenn Sie das automatisch und z. möchte swig -MM
verwenden - dies kann ohne Änderung der UseSWIG.cmake
erfolgen Code.
Wenn ich mir anschaue, warum der vorherige Versuch, den Sie verlinkt haben, rückgängig gemacht wurde - nämlich die Diskussion über "0012307 : Regression in 2.8.5 rc2: UseSWIG.cmake broken " - Ich glaube nicht, dass SWIG_GET_WRAPPER_DEPENDENCIES()
tatsächlich gebrochen wurde, es hat nur eine neue Einschränkung eingeführt:" Das erfordert einfach alle Header für das swig-Modul " vor dem Aufruf von SWIG_ADD_MODULE()
.
Also schlug ich vor, die Option -ignoremissing
SWIG hinzuzufügen, aber das würde weitere Tests erfordern.
Mit CMake Version 3.8.0 kam ein Fix "Abhängigkeiten von SWIG-Dateien für Makefile-Generatoren automatisch prüfen" das funktioniert für makefile
generators .
Die allgemeine Diskussion, wie das zu beheben ist (einschließlich meines Vorschlags), wird unter "Problem # 4147: [MODULES ] [UseSWIG] Verwenden Sie swig, um Abhängigkeiten zu berechnen ". Das Ticket ist noch offen (wurde wieder geöffnet), also zögern Sie nicht, Ihre Unterstützung, Vorschläge oder Testergebnisse dort hinzuzufügen.
Tags und Links python dependencies c++ cmake swig