Добавление заголовочных файлов 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
Другие вопросы по тегам