You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CMake中打印变量?PROJECT_SOURCE_DIR不生效编译报错如何解决?

问题根因说明
  • 所有报错的核心原因是CMake变量引用语法使用错误:CMake 中引用变量需要使用 ${变量名} 格式,而非 Shell 风格的 $(变量名)。你写的 $(PROJECT_SOURCE_DIR) 没有被 CMake 识别为变量引用,直接被当成普通字符串处理,因此会打印字面量 $(PROJECT_SOURCE_DIR),也无法匹配到实际路径下的源文件。
具体问题解答

1. 正确打印 PROJECT_SOURCE_DIR 的方法

将 message 行的括号类型替换为大括号即可,正确写法如下:

message("${PROJECT_SOURCE_DIR}")

2. 编译失败的修复方案

把 CMakeLists.txt 中所有 $(PROJECT_SOURCE_DIR) 统一替换为 ${PROJECT_SOURCE_DIR},修改后的完整配置文件如下:

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)

修改完成后重新在 build 目录执行 cmake .. && make 即可完成正常构建。

可选优化建议
  • 优先使用 target_include_directories、target_link_directories 代替全局的 include_directories、link_directories,作用域更清晰,不会污染其他目标的编译配置
  • 链接静态库时可以直接写全路径,避免链接器找不到库文件的问题,例如可以把链接行改为 target_link_libraries(YuvParallelProcess ${PROJECT_SOURCE_DIR}/lib/libyuv/libyuv.a)

内容的提问来源于stack exchange,提问作者Qiang Yao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 07:36:04