Добавление заголовочных файлов protobuf в CPP
Я использую protobuf для генерации кода cpp.
В моем imagereader.prototxt
node {
name: "Image Reader";
type: ImageReader;
name: "path";
type: pb_string;
#value: "${DIR_DATA}/images/";
value: "/local/git/data/images"";
}
}
Код генерируется в зависимости от содержимого файла. т.е. в сгенерированном файле cpp у меня есть строка
/*
* declare instance of node "Image Reader"
*/
sandbox::images::ImageReader node_0(std::string("/local/git/data/images/"));
Проблема заключается в том, что, если другой разработчик использует код, он потерпит неудачу, потому что у него может не быть такой же структуры каталогов. Я попытался с переменной окружения DIR_DATA в файле prototxt, но компилятор генерирует файл с точно именем DIR_DATA, который, конечно, не может быть найден.
/*
* declare instance of node "Image Reader"
*/
sandbox::images::ImageReader node_0(std::string("${DIR_DATA}/images/"));
Есть ли способ, что protobuf добавляет файл заголовка с помощью команды в файле prototxt? Таким образом, я могу вручную #define DIR_DATA в этом заголовочном файле.
1 ответ
Этот пост старый, но для всех интересующихся:
Protobuf не поддерживает импорт комментариев из прототипа в сгенерированный класс.
Хороший подход — добавить заголовок авторских прав в генерирующий скрипт. В моем случае у меня есть gen_proto_files.sh, который выполнит другой этап создания класса protobuf и проверки версии, чтобы убедиться, что все в порядке (с цветом), а затем вы добавляете к нему заголовок. Вот небольшой нефайловый пример:
#!/bin/bash
HEADER="/* Your proprietary header here */\n\n"
FILES=$(find ./generated -type f \( -name "*.h" -o -name "*.cpp" \))
for FILE in $FILES; do
echo -e "$HEADER$(cat $FILE)" > $FILE
done