我在this之后制作了自己的例子。但是我不想创建库,只是从.proto文件生成头文件和源文件。
所以,我只是改变:
的CMakeLists.txt
PROJECT(rpc)
CMAKE_MINIMUM_REQUIRED (VERSION 2.6)
SET(CMAKE_CXX_FLAGS "-g -Wall -Werror -std=c++11")
ADD_SUBDIRECTORY(proto)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
ADD_EXECUTABLE(main main.cpp)
#TARGET_LINK_LIBRARIES(main proto ${PROTOBUF_LIBRARY})
TARGET_LINK_LIBRARIES(main ${PROTOBUF_LIBRARY}) #<==== I changed here
原/的CMakeLists.txt
INCLUDE(FindProtobuf)
FIND_PACKAGE(Protobuf REQUIRED)
INCLUDE_DIRECTORIES(${PROTOBUF_INCLUDE_DIR})
PROTOBUF_GENERATE_CPP(PROTO_SRC PROTO_HEADER message.proto)
#ADD_LIBRARY(proto ${PROTO_HEADER} ${PROTO_SRC}) #I don't compile lib anymore
但它不会从.proto生成头文件和源文件。所以它无法编译。我认为在使用add_subdirectory
时,它不会运行命令protobuf_generate_cpp
。任何想法都表示赞赏。
答案 0 :(得分:1)
您可以直接将${PROTO_HEADER} ${PROTO_SRC}
添加到ADD_EXECUTABLE(main)
来电,也可以将以下行添加到proto/CMakeLists.txt
:
add_custom_target(gen_proto ALL DEPENDS ${PROTO_HEADER} ${PROTO_SRC})