проекта:CMake: неправильный порядок компиляции: generate_protobuf_cpp в подмодуль
/
|--- src/
|--- *.cpp
|--- CMakeLists.txt (root)
|--- vendor/
|--- submodule
|--- protos
|--- message.proto
|--- src
|--- *.cpp (#include "message.pb.h")
|--- CMakeLists.txt (submodule)
CMakeLists.txt
(субмодуля):
##################################
# Message protos
##################################
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS protos/message.proto)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
##################################
# submodule
##################################
include_directories(src/)
set(submodule_SRC src/foobar.cpp ${PROTO_SRCS} ${PROTO_HDRS})
add_library(submodule STATIC ${submodule_SRC})
target_link_libraries(goboard ${PROTOBUF_LIBRARIES})
set(submodule_INCLUDE_DIR ${Protobuf_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR} PARENT_SCOPE)
CMakeLists.txt
(корень)
add_subdirectory(${root_SOURCE_DIR}/vendor/submodule)
include_directories(${submodule_INCLUDE_DIR})
# And other sources...
Сам подмодуль компилирует хорошо , Но когда я включаю его в качестве подмодуля корневого проекта. make -j4
даст:
vendor/submodule/foobar.cpp: fatal error: 'message.pb.h' file not found
#include "message.pb.h"
Как ни странно, если я бегу make -j4
снова после того, как он потерпел неудачу, [ 33%] Running C++ protocol buffer compiler on src/protos/message.proto
назвали бы правильно и двоичная может быть сгенерирована без каких-либо проблем. make -j2
или make
не столкнется с этой проблемой.
Угадайте, что причиной может быть неправильная зависимость источника, но как ее исправить?
Proto path - это опечатка. Есть ли способ (или обходной путь) использовать 'protobuf_generate_cpp' в вложенном проекте? – lz96
@ lz96 Не знаю. – arrowd