

























在 CMake 中,${CMAKE_CURRENT_BINARY_DIR} 是一个极其常用的内置核心变量。
要理解它的语法,我们需要把它拆成两部分来看:
${ ... }:这是 CMake 的变量引用语法。CMAKE_CURRENT_BINARY_DIR:这是 CMake 的变量名称。下面为你详细介绍它的语法规则、含义以及为什么在你的 Nana 项目中必须用到它。
${}在 CMakeLists.txt 中,如果你直接写一个名字(比如 MY_VAR),CMake 只会把它当成一个普通的字符串字面量。
运算/命令( ${变量名} )${} 后,CMake 才会去内存中查找这个变量当前存放的真实路径或文本,并把它替换过来。CMAKE_CURRENT_BINARY_DIR 这个名字由三部分组合而成,完美体现了 CMake 的命名规范:
CMAKE_:所有 CMake 官方自带的、内置的全局变量,都以此为前缀。CURRENT_:表示当前正在处理的那个 CMakeLists.txt 文件所在的范围。BINARY_DIR:在 CMake 的术语中,BINARY 指的是编译产物/输出目录(即生成的 .obj、.lib、.exe 存放的地方),而不是你的源码目录。一句话总结:它代表当前这个
CMakeLists.txt文件所对应的编译输出文件夹的绝对路径。
为了让你彻底搞懂,我们来看看在你的 Visual Studio 2026 项目中,它具体对应电脑上的哪个盘符。
假设你的项目放在 C:/Users/Logic/source/repos/MyNanaApp,当你在 VS 中编译时,VS 会默认创建一个名为 out/build/x64-Debug 的文件夹来存放编译结果。
CMake 内部有两个形影不离的兄弟变量:
| 变量名 | 含义 | 在你电脑上的实际绝对路径(示例) |
|---|---|---|
${CMAKE_CURRENT_SOURCE_DIR} |
当前源码目录 | C:/Users/Logic/source/repos/MyNanaApp |
${CMAKE_CURRENT_BINARY_DIR} |
当前编译输出目录 | C:/Users/Logic/source/repos/MyNanaApp/out/build/x64-Debug |
回顾一下你之前写的这行引入 Nana 的命令:
add_subdirectory(../nana ${CMAKE_CURRENT_BINARY_DIR}/nana_build)
add_subdirectory 的标准语法是:add_subdirectory(源码目录 [输出目录])。
如果引入的第三方库(比如 ../nana)在你的主项目目录外面,CMake 就无法自动为它推导输出路径。
此时,你就必须显式地告诉 CMake:“请把隔壁 Nana 源码编译出来的那些密密麻麻的 .obj 和 .lib 文件,统统丢到我当前项目的编译输出目录下的 nana_build 文件夹里!”
这样做的好处是:
out/build/.../nana_build 中,绝对不会污染、弄脏你原本干净的 ../nana 源码文件夹。${CMAKE_CURRENT_BINARY_DIR} 下的垃圾文件全部删干净。此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。