如何在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
相关产品推荐
相关产品推荐

