我正在为最近的项目使用CMake,我想确认设置了正确的路径
set(_protobuf_include_path -I . -I ${_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR})
我使用message
来检查_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR
的值,但未在终端上打印任何内容
message( STATUS ${_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR} ) # no output for this
我的意图是构建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>
因此,我在目录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)
[...]
这样做之后,我仍然遇到同样的问题。
答案 0 :(得分:0)
首先,与该问题无关,但与modern CMake的技术和用法有关。
为了设置包含路径,最好使用target_include_directories
命令,例如
target_include_directories(mytarget
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
PUBLIC ${_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR}
)
现在,对于实际的问题,如果可以显示${_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR}
的实际设置(通过`-D在命令行中显示)选项会很有帮助?)但是可以这样打印:
message(STATUS "include dir: ${_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR}")
我怀疑实际变量内容中的虚假空格或类似内容。