如何在CMake中打印变量?

Qia*_*Yao 28 c++ cmake

我想使用 cmake 来构建我的项目,我的 CMakeLists.txt 非常简单:

cmake_minimum_required(VERSION 3.20)

 project(YuvParallelProcess)

 message("$(PROJECT_SOURCE_DIR)")

 include_directories($(PROJECT_SOURCE_DIR)/inc)
 link_directories($(PROJECT_SOURCE_DIR)/lib/libyuv)

 add_executable(YuvParallelProcess  $(PROJECT_SOURCE_DIR)/src/main.cpp)

 target_link_libraries(YuvParallelProcess  libyuv.a)
Run Code Online (Sandbox Code Playgroud)

我的项目文件的组织方式如下:

 YuvParallelProcess
                      build
                      data
                      inc
                      lib
                      src
                      CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

当我cmake ..build目录中运行时,外壳打印:

$(PROJECT_SOURCE_DIR)
-- Configuring done
CMake Error at CMakeLists.txt:10 (add_executable):
  Cannot find source file:

    $(PROJECT_SOURCE_DIR)/src/main.cpp


CMake Error at CMakeLists.txt:10 (add_executable):
  No SOURCES given to target: YuvParallelProcess
Run Code Online (Sandbox Code Playgroud)

我不知道为什么 shell 只打印$(PROJECT_SOURCE_DIR)除了值之外的值PROJECT_SOURCE_DIR 如何打印值PROJECT_SOURCE_DIR 顺便说一句,我不明白为什么 cmake 无法编译我的项目

S.M*_*.M. 43

Cmake 使用花括号来获取变量的值:

${PROJECT_SOURCE_DIR}
Run Code Online (Sandbox Code Playgroud)

我建议像下面这样转储消息,以免跳过空消息。

message(PROJECT_SOURCE_DIR="${PROJECT_SOURCE_DIR}")
Run Code Online (Sandbox Code Playgroud)

Cmake 无法配置您的项目,因为它无法识别括号中的变量并被视为$(PROJECT_SOURCE_DIR)字符串文字。

有 CMakePrintHelpers Cmake 模块用于转储变量,与上面完全相同。

include(CMakePrintHelpers)
cmake_print_variables(PROJECT_SOURCE_DIR)
Run Code Online (Sandbox Code Playgroud)


小智 23

除了使用 之外message,您还可以使用cmake_print_variables显示变量。在这种情况下,您必须包括CMakePrintHelpers

include(CMakePrintHelpers)

cmake_print_variables(PROJECT_SOURCE_DIR)
Run Code Online (Sandbox Code Playgroud)

输出将是:

-- PROJECT_SOURCE_DIR="path/to/your/project"
Run Code Online (Sandbox Code Playgroud)

cmake_print_variables您还可以显示多个变量,如下所示:

cmake_print_variables(PROJECT_SOURCE_DIR ANOTHER_VARIABLE)
Run Code Online (Sandbox Code Playgroud)

输出将是:

-- PROJECT_SOURCE_DIR="path/to/your/project" ; ANOTHER_VARIABLE="other variable"
Run Code Online (Sandbox Code Playgroud)