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:
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)
(j'ai essayé avec/sans le "LIBS += ...")

et test.proto:
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;
}
normalement, lors de la phase de compilation, il devrait me créer les *.pb.h et les *.pb.cc


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...