Bonjour,
Pour un projet, j'ai besoin d'utiliser Protobuf avec Qt.
Je suis sous Windows7 64bits
J'ai compilé les sources de protobuf que j'ai placé dans le répertoire mingw de Qt Creator (lib/include/bin). (j'ai compilé avec la dernière version de MinGW (et msys) vu que je vois pas de shell msys dans l'arborescence de Qt Creator, c'est peut être de là que vient le problème)
J'ai créé un Protobuf.pri, dans lequel je met toute la mixture pour mes futurs utilisations:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 message("Generating protocol buffer classes from .proto files.") protobuf_decl.name = protobuf headers protobuf_decl.input = PROTOS protobuf_decl.output = ${QMAKE_FILE_IN_PATH}/${QMAKE_FILE_BASE}.pb.h protobuf_decl.commands = protoc --cpp_out=${QMAKE_FILE_IN_PATH} --proto_path=${QMAKE_FILE_IN_PATH} ${QMAKE_FILE_NAME} protobuf_decl.variable_out = HEADERS QMAKE_EXTRA_COMPILERS += protobuf_decl protobuf_impl.name = protobuf sources protobuf_impl.input = PROTOS protobuf_impl.output = ${QMAKE_FILE_IN_PATH}/${QMAKE_FILE_BASE}.pb.cc protobuf_impl.depends = ${QMAKE_FILE_IN_PATH}/${QMAKE_FILE_BASE}.pb.h protobuf_impl.commands = $$escape_expand(\n) protobuf_impl.variable_out = SOURCES QMAKE_EXTRA_COMPILERS += protobuf_impl
J'ai ensuite créé un project minimal pour tester tout ça:
(j'ai essayé avec/sans le "LIBS += ...")
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = ProtoTest TEMPLATE = app SOURCES += main.cpp\ mainwindow.cpp HEADERS += mainwindow.h FORMS += mainwindow.ui PROTOS = test.proto LIBS += lprotobuf.a include(.\..\..\Protobuf\Protobuf.pri)
et test.proto:
normalement, lors de la phase de compilation, il devrait me créer les *.pb.h et les *.pb.cc
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 message Person { required string name = 1; required int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { required string number = 1; optional PhoneType type = 2 [default = HOME]; } repeated PhoneNumber phone = 4; }
Mais je me retrouve au lieu de ça avec un beau message d'erreur:
:-1: erreur : No rule to make target 'test.proto', needed by 'test.pb.cc'. Stop.
Et là... je bloque...
Partager