如何在 cmakelist.txt 中打印变量内的值

Sij*_*ith 6 linux cmake

我在最近的项目中使用 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)

这样做之后,我仍然遇到同样的问题。

com*_*por 0

首先,与问题有点无关,但与现代 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)

我怀疑实际变量内容中存在虚假空格或类似的内容。