我有以下CMakeList命令在我的CMakeLists.txt文件,我想下生成的.cc和.h文件src-gen夹这是在我的主文件夹,在那里src,include和其他的东西都是.我把命令看看是否有效,但它们仍然是在外面生成的src-gen文件夹,所以它不起作用.
include(FindProtobuf)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
set_source_files_properties(${PROTO_SRC} ${PROTO_HEADER} PROPERTIES GENERATED TRUE)
set(PROTO_SRC ${PROTO_SRC} ${PROJECT_SOURCE_DIR}/src-gen) #does not work..
set(PROTO_HEADER ${PROTO_HEADER} ${PROJECT_SOURCE_DIR}/src-gen)#does not work..
find_package(Protobuf REQUIRED)
PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS proto/VisionData.proto)
include_directories(
${PROTOBUF_INCLUDE_DIRS}
include
)
add_executable(cameraSubscriber src/main.cpp ${PROTO_SRCS} ${PROTO_HDRS})
target_link_libraries(cameraSubscriber
${PROTOBUF_LIBRARIES}
)
Run Code Online (Sandbox Code Playgroud)
有谁知道错误在哪里,或者如果有必要我应该添加什么?
这来自于限制FindProtobuf.如果仔细查看此模块的文档,可以找到以下行:
PROTOBUF_GENERATE_CPP宏和add_executable()或add_library()调用仅在同一目录中正常工作.
事实证明,您的路径设置不起作用的原因是您正在设置相对于您的路径PROJECT_SOURCE_DIR.如果查看此模块的源代码,您会发现输出变量完全忽略了您正在设置的变量,并将内容写入CMAKE_CURRENT_BINARY_DIR:
list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc")
list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h")
Run Code Online (Sandbox Code Playgroud)
我在项目中使用的解决方案是将所有.proto文件放在一个目录中,CMakeLists.txt在该目录中放置一个指定proto构建命令的目录.这样你就可以ADD_SUBDIRECTORY对proto文件夹进行操作,并且你的CMAKE_CURRENT_BINARY_DIR设置也会适当.
这种方法还有让您选择二进制目录的好处.我认为像这样的电话会给你最接近你所要求的东西.注意第二个参数被赋值给binary_dir(这里引用):
ADD_SUBDIRECTORY (${PROTO_DIRECTORY} ${PROJECT_SOURCE_DIR}/src-gen)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3389 次 |
| 最近记录: |