我在最近的项目中使用 CMake,我想确认设置了正确的路径
set(_protobuf_include_path -I . -I ${_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR})
Run Code Online (Sandbox Code Playgroud)
我曾经在终端中message检查_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR但不打印任何内容的值
message( STATUS ${_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR} ) # no output for this
Run Code Online (Sandbox Code Playgroud)
我的意图是构建 Grpc1.14.1,它与 protobuf 有依赖关系,所以我下载了 protobuf 3.6.01,并且 grpc 和 protobuf 都保存在同一目录 ( home/user/src) 下。
构建时出现此错误
google/protobuf/stubs/common.h: No such file or directory
#include <google/protobuf/stubs/common.h>
Run Code Online (Sandbox Code Playgroud)
所以我protobuff.cmake在目录中打开gRPC/cmake并更改了protobuf根路径
if(NOT PROTOBUF_ROOT_DIR)
#set(PROTOBUF_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/protobuf)
set(PROTOBUF_ROOT_DIR ../../ThirdParty/protobuf)
[...]
Run Code Online (Sandbox Code Playgroud)
这样做之后,我仍然遇到同样的问题。
首先,与问题有点无关,但与现代 CMake技术和用法相关。
为了设置包含路径,最好使用命令target_include_directories,例如
target_include_directories(mytarget
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
PUBLIC ${_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR}
)
Run Code Online (Sandbox Code Playgroud)
现在,对于实际问题,如果您可以显示 的实际设置${_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR}(是通过命令行通过 `-D)选项吗?),但您可以像这样打印它:
message(STATUS "include dir: ${_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR}")
Run Code Online (Sandbox Code Playgroud)
我怀疑实际变量内容中存在虚假空格或类似的内容。
| 归档时间: |
|
| 查看次数: |
7294 次 |
| 最近记录: |