cmake:“ add_custom_target” + PRE_BUILD在构建时未生效

时间:2019-02-20 04:20:44

标签: c++ cmake dependencies grpc target

我已经使用cmake构建我的google rpc示例代码。我有

 examples.proto
 client.cpp
 server.cpp

我使用protoc命令为protobuf和grpc CMakeLists.txt构建.cc / .h文件:

cmake_minimum_required(VERSION 2.8)
add_definitions(-std=c++11)
include_directories(.)

add_custom_target(protoFile
    PRE_BUILD
    COMMAND protoc --cpp_out=./ examples.proto
)
add_custom_target(protoSource
    PRE_BUILD
    COMMAND protoc --grpc_out=./ --plugin=protoc-gen-grpc=/usr/local/bin/grpc_cpp_plugin examples.proto
)
add_dependencies(protoSource protoFile)

add_library(protoCpp SHARED examples.grpc.pb.cc examples.pb.cc)
add_dependencies(protoCpp protoSource)

link_libraries(protoCpp protobuf grpc grpc++)
add_executable(client client.cpp)
add_executable(server server.cpp)

然后:

cmake .
-- Configuring done
CMake Error at CMakeLists.txt:15 (add_library):
Cannot find source file:

    examples.grpc.pb.cc

Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
.hxx .in .txx


CMake Error: CMake can not determine linker language for target: protoCpp
CMake Error: Cannot determine link language for target "protoCpp".
-- Generating done

似乎我的“ add_custom_target()”未执行,并且“ ls”未显示任何我期望的文件。那么如何使他们被处决呢?我已经添加了“ protoSource作为“ protoCpp”库的依赖项,但是没有用。

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

add_custom_target 之后使用 add_executable,第一个参数应该是由 add_executable 创建的目标,在您的示例“客户端”或“服务器”中。您不能在 PRE_BUILD 中使用 add_custom_target,但我不确定;

另见:add_custom_target 文档。