Я пытаюсь скомпилировать несколько подпапок файлов .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" и как его удалить?