Ich bin Teil eines Projekts, das protobufs verwendet, um zwischen einem Python-basierten Client und einem C ++ basierten Server zu kommunizieren. Wir verwenden auch CMake.
Mit CMake suche ich nach einer Möglichkeit, das protoc
-Programm nur bedingt aufzurufen, wenn *.proto
Dateien sich ändern. Meine aktuelle Verzeichnisstruktur (dies scheint ein Teil des Problems zu sein) hat ein Verzeichnis für die *.proto
-Dateien und separate Verzeichnisse für die generierten *.pb.{h|cc}
und *_pb2.py
-Dateien:
Die Datei (root) CMakeLists.txt
(unten) führt das Programm protoc
aus, wenn der Befehl build/cmake ..
ausgeführt wird:
Die Messages/proto/CMakeLists.txt
-Datei (von der ich nicht sicher bin, hat irgendeinen Effekt):
Idealerweise sollte das Programm protoc
als Teil des Befehls build/make
ausgeführt werden, und nur (erneut) die Dateien *.pb.{h|cc}
und *_pb2.py
wenn sich eine *.proto
-Datei ändert.
Einige Dateien im Verzeichnis Server/
haben #include <Messages/cpp/Xxxx.pb.h>
Direktiven.
Für Bonuspunkte würde ich es vorziehen, wenn die Dateien *.pb.{h|cc}
und *_pb2.py
in ihren jeweiligen Verzeichnissen erzeugt werden ( Messages/cpp/
bzw. Messages/py/
). Wenn jedoch jemand mit dem Abhängigkeitsteil des Problems helfen kann, bin ich froh, dass die Dateien *.pb.{h|cc}
und *_pb2.py
zusammen mit den *.proto
-Dateien existieren.
Vielen Dank im Voraus für Anregungen!
Dies ist nicht getestet, aber Sie müssen einen benutzerdefinierten Befehl ein benutzerdefiniertes Ziel hinzufügen.
Sie müssten einige Variablen für die Ausgabezeile erstellen, aber ohne zu wissen, wie man * .proto in die * .pb. {h | cc} und * _pb2.py Dateien umwandelt, kann ich nicht helfen. Sehen Sie sich die Variablen proto_packages_cpp und proto_packages_python an, wohin diese gehen sollen.
%Vor%Tags und Links python c++ cmake protocol-buffers