Неожиданный путь вывода для скомпилированных файлов protobuf - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь скомпилировать несколько подпапок файлов .proto с помощью CMake, и я хотел бы, чтобы вывод оказался в похожей структуре папок. Я довольно новичок в CMake, поэтому я ожидаю, что это элегантный способ сделать это, но сейчас я вручную указываю подпапки, чтобы я мог видеть, что происходит. На этом этапе, запустив CMakeLists.txt, который я показал ниже, успешно читает файлы .proto и генерирует исходный код, но вместо того, чтобы оказаться в ./proto_gen/include/frontseat/vehicle, как я ожидал, они все закончатся ./ proto_gen / включить / frontseat / автомобиль / автомобиль.

Я попытался распечатать все пути в вызове execute_process, и ни один из них нигде не имеет такого «транспортного средства / транспортного средства» с двойным вложением, поэтому я предполагаю, что это как-то связано с тем, как команда protoc Генерация имени файла. Что странно для меня, однако, это то, что ранее у меня были все мои файлы прототипов в одной папке, и все казалось довольно ясным о том, откуда берутся имена файлов. Единственная разница между этой версией и тем, что я добавил в пути папку «vehicle».

# Define CMake requirements and project name
cmake_minimum_required(VERSION 3.0)
project( frontseat )

# Define directories for .proto files and compiled output
GET_FILENAME_COMPONENT(PROTO_MAIN_DIR "./proto" ABSOLUTE)
GET_FILENAME_COMPONENT(PROTO_GEN_DIR "./proto_gen" ABSOLUTE)

# Get all the .proto files to be compiled from the first subfolder
file(GLOB PROTO_FILES ${PROTO_MAIN_DIR}/${PROJECT_NAME}/vehicle/*.proto)

# Make directories needed for protobuf files
file(MAKE_DIRECTORY ${PROTO_GEN_DIR}/include/${PROJECT_NAME}/vehicle)
file(MAKE_DIRECTORY ${PROTO_GEN_DIR}/src/vehicle)

# Iterate over the list of .proto files to compile
FOREACH (proto ${PROTO_FILES})
  get_filename_component(basename ${proto} NAME_WE)

  # Generate proto file using protoc executable
  message("   Processing vehicle proto file: " ${basename})
  execute_process(COMMAND protoc --cpp_out=${PROTO_GEN_DIR}/include/${PROJECT_NAME}/vehicle -I${PROTO_MAIN_DIR}/${PROJECT_NAME} ${PROTO_MAIN_DIR}/${PROJECT_NAME}/vehicle/${basename}.proto)
ENDFOREACH(proto)

Может кто-нибудь сказать мне, откуда отсюда находится дополнительный слой подпапки "Vehicle" и как его удалить?

1 Ответ

0 голосов
/ 12 июня 2019

Это может быть связано с вашей проблемой: https://github.com/protocolbuffers/protobuf/issues/3044

По сути, первый указанный вами путь импорта используется в качестве корневого для структуры прототипов, и выходные данные генерируются с этой относительной структурой в выходном каталоге. Так что вам просто нужно изменить команду на COMMAND protoc --cpp_out=${PROTO_GEN_DIR}/include/${PROJECT_NAME} -I${PROTO_MAIN_DIR}/${PROJECT_NAME} ${PROTO_MAIN_DIR}/${PROJECT_NAME}/vehicle/${basename}.proto

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...