CMake: Erzeugen Sie bedingt protobuf '* pb. {h | cpp}' Dateien, wenn * .proto Dateien sich ändern

8

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:

%Vor%

Die Datei (root) CMakeLists.txt (unten) führt das Programm protoc aus, wenn der Befehl build/cmake .. ausgeführt wird:

%Vor%

Die Messages/proto/CMakeLists.txt -Datei (von der ich nicht sicher bin, hat irgendeinen Effekt):

%Vor%

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!

    
Scottymac 18.09.2013, 00:02
quelle

1 Antwort

3

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%     
grim 15.10.2013 01:00
quelle

Tags und Links