c++ - cmake: "add_custom_target" + PRE_BUILD 在构建时没有生效
问题描述
我使用 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”库的依赖项,但是没有用。
如何解决这个问题?
解决方案
使用add_custom_target
after add_executable
,第一个参数应该是由 创建的目标add_executable
,在您的示例中为“客户端”或“服务器”。你不能使用PRE_BUILD
in add_custom_target
,但我不确定;
另请参阅:add_custom_target文档。
推荐阅读
- java - 任务完成返回
- python - 类型检查动态添加的属性
- xamarin.android - 我可以使用 libVLCSharp 将视频帧渲染到内存中吗?
- python - 如何为已更改为仅包含唯一值的数据选择主键
- c# - 我想要一种方法来根据实体框架中的 where 子句更新一系列记录,而不使用 ToList() 和 foreach
- php - 我的提交按钮不会在我的 HTML 表单中注册我的信息
- java - Java 8:分组、计数和连接
- javascript - 有没有办法在柯里化函数中参数化过滤器评估的右侧
- scala - Spark Scala:在x行之后将数据帧拆分为多个数据帧
- algorithm - 这个函数的 T(s) 方程是什么?