Struktur Projekt:CMake: falsche Zusammenstellung Reihenfolge: generate_protobuf_cpp in Submodul
/
|--- src/
|--- *.cpp
|--- CMakeLists.txt (root)
|--- vendor/
|--- submodule
|--- protos
|--- message.proto
|--- src
|--- *.cpp (#include "message.pb.h")
|--- CMakeLists.txt (submodule)
CMakeLists.txt
(Modul):
##################################
# 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
(root)
add_subdirectory(${root_SOURCE_DIR}/vendor/submodule)
include_directories(${submodule_INCLUDE_DIR})
# And other sources...
Das Submodul selbst kompiliert gut . Aber wenn ich es als Submodul von Root-Projekt einschließe. make -j4
ergäbe:
vendor/submodule/foobar.cpp: fatal error: 'message.pb.h' file not found
#include "message.pb.h"
Seltsam, wenn ich make -j4
wieder laufen, nachdem er scheiterte [ 33%] Running C++ protocol buffer compiler on src/protos/message.proto
korrekt aufgerufen werden würde, und binäre könnte ohne Probleme erzeugt werden. make -j2
oder make
wird dieses Problem nicht haben.
Raten Sie, der Grund könnte falsche Quellenabhängigkeit sein, aber wie kann man das beheben?
Proto Pfad ist ein Tippfehler. Gibt es eine Möglichkeit (oder Workaround), 'protobuf_generate_cpp' im verschachtelten Projekt zu verwenden? – lz96
@ lz96 Ich bin mir dessen nicht bewusst. – arrowd