Я использую модуль FindProtobuf в проекте, где файлы буфера протокола находятся в подкаталоге. Я хочу, чтобы файл CMakeLists.txt в этом подкаталоге вызывал protoc для создания файлов CPP. Структура моего проекта такова:
cammy/CMakeLists.txt # Root CMakeLists.txt
cammy/protofiles/test.proto # protofile
cammy/protofiles/CMakeLists.txt
У меня есть include (FindProtobuf), вызов find_package и вызов PROTOBUF_GENERATE_CPP в файле CMakeLists.txt в папке protobuf.
Выполняемый шаг сборки находится в файле Root CMakeLists.txt, и я добавляю сгенерированные файлы к целевому исполняемому файлу в этом файле то есть.
add_executable( ${EXEC} ${SRCS} ${PROTO_SRC} ${PROTO_HEADER} )
target_link_libraries( ${EXEC} ${PROTOBUF_LIBRARIES} )
оба определены в корне CMakeLists.txt
Когда я запускаю cmake, он не запускает protoc для генерации исходных файлов, даже если я окончательно привязываю сгенерированные источники к исполняемому файлу, тем самым создавая зависимость.
Когда я перемещаю все содержимое CMakeLists.txt в папке protofiles в корневой файл CMakeLists.txt, файлы proto скомпилируются.
Может ли кто-нибудь помочь мне с этим? Я хочу, чтобы все материалы для создания буфера протокола вошли в файл CMakeLists.txt, созданный в папке прототипов.
Я также заметил, что переменные, созданные во внутреннем файле CMakeLists.txt(например, PROTO_SRC), определены во внутреннем файле при печати (т.е. я получаю правильное имя файла CPP), но когда я печатаю одну и ту же переменную в корневом файле. он пуст. Его почти как будто мне нужно "экспортировать" (если был способ в cmake), переменные попадают в корневую папку.
Любая помощь будет высоко оценена.
Спасибо Картик