惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cisco Talos Blog
Cisco Talos Blog
Latest news
Latest news
G
GRAHAM CLULEY
Security Latest
Security Latest
C
Cyber Attacks, Cyber Crime and Cyber Security
Security Archives - TechRepublic
Security Archives - TechRepublic
N
News and Events Feed by Topic
S
Secure Thoughts
Simon Willison's Weblog
Simon Willison's Weblog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Help Net Security
Help Net Security
S
Schneier on Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - Franky
H
Heimdal Security Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
The Cloudflare Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
人人都是产品经理
人人都是产品经理
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
有赞技术团队
有赞技术团队
博客园 - 【当耐特】
雷峰网
雷峰网
Forbes - Security
Forbes - Security
IT之家
IT之家
The Hacker News
The Hacker News
P
Privacy & Cybersecurity Law Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
N
News | PayPal Newsroom
AI
AI
博客园 - 三生石上(FineUI控件)
PCI Perspectives
PCI Perspectives
H
Hacker News: Front Page
Apple Machine Learning Research
Apple Machine Learning Research
N
News and Events Feed by Topic
WordPress大学
WordPress大学
P
Palo Alto Networks Blog
S
SegmentFault 最新的问题
Last Week in AI
Last Week in AI
C
CERT Recently Published Vulnerability Notes
Cyberwarzone
Cyberwarzone
阮一峰的网络日志
阮一峰的网络日志
K
Kaspersky official blog
L
LINUX DO - 最新话题
宝玉的分享
宝玉的分享
S
Security @ Cisco Blogs
Know Your Adversary
Know Your Adversary
小众软件
小众软件
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园_首页

博客园 - 立体风

brainstorming SKILL技能完整中文翻译版 更新 claude code 官方插件市场 Sigmoid 函数的数学起源与定义详解 路径在powershell 配置文件 Profile 和 环境变量 PATH 的区别 当AI构建自身 nana gui库的回调函数 Nana c++ gui库的对话框函数 -- 理解 nana 的运行机制 介绍 MSVC 的编译命令/ Zc 学习 nana c++ 库 (一) AutoHotkey v2 的源码学习路线 Visual Studio 中行号右边的黄色竖条 大O表示法推导 allocate 中为什么有两个L vs的cl.exe 编译器 c++20 基本配置 IT高频词 address Python Install Manager (PIM,官方安装管理器)简介 debian 中 contrib 软件仓库 debian 版本号及 apt 命令对软件的区分 sysctl的历史及常用命令 极限运算的法则 TeX 的 ctex 宏包的基本用法 XeLaTeX 的基本用法 XeLaTeX 介绍 为什么梯度向量 ∇f 指向函数值增长最快的方向 三角函数的余弦定理的证明 向量点积的几何定义的证明 方向导数公式的证明 仿射函数的定义及用途 凸集的定义及证明 在 LaTeX 公式中处理英文单词 梯度下降法 (Gradient Descent)的数学原理。 梯度下降法简介 向量形式表达最小二乘法 线性回归模型的核心数学表达式 risidual 音标和本义 coefficients的音标及本义(线性模型)
CMake 变量 ${CMAKE_CURRENT_BINARY_DIR}
立体风 · 2026-06-18 · via 博客园 - 立体风

在 CMake 中,${CMAKE_CURRENT_BINARY_DIR} 是一个极其常用的内置核心变量

要理解它的语法,我们需要把它拆成两部分来看:

  1. 外层的 ${ ... }:这是 CMake 的变量引用语法
  2. 内层的 CMAKE_CURRENT_BINARY_DIR:这是 CMake 的变量名称

下面为你详细介绍它的语法规则、含义以及为什么在你的 Nana 项目中必须用到它。


1. 变量引用的语法:${}

在 CMakeLists.txt 中,如果你直接写一个名字(比如 MY_VAR),CMake 只会把它当成一个普通的字符串字面量。

  • 语法:运算/命令( ${变量名} )
  • 作用:取值(Dereferencing)。加上 ${} 后,CMake 才会去内存中查找这个变量当前存放的真实路径或文本,并把它替换过来。

2. 变量名的含义拆解

CMAKE_CURRENT_BINARY_DIR 这个名字由三部分组合而成,完美体现了 CMake 的命名规范:

  • CMAKE_:所有 CMake 官方自带的、内置的全局变量,都以此为前缀。
  • CURRENT_:表示当前正在处理的那个 CMakeLists.txt 文件所在的范围。
  • BINARY_DIR:在 CMake 的术语中,BINARY 指的是编译产物/输出目录(即生成的 .obj.lib.exe 存放的地方),而不是你的源码目录。

一句话总结:它代表当前这个 CMakeLists.txt 文件所对应的编译输出文件夹的绝对路径


3. 实例对比:源码目录 vs 编译目录

为了让你彻底搞懂,我们来看看在你的 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

4. 为什么在引入 Nana 时必须用它?

回顾一下你之前写的这行引入 Nana 的命令:

add_subdirectory(../nana ${CMAKE_CURRENT_BINARY_DIR}/nana_build)

add_subdirectory 的标准语法是:add_subdirectory(源码目录 [输出目录])
如果引入的第三方库(比如 ../nana)在你的主项目目录外面,CMake 就无法自动为它推导输出路径。

此时,你就必须显式地告诉 CMake:“请把隔壁 Nana 源码编译出来的那些密密麻麻的 .obj.lib 文件,统统丢到我当前项目的编译输出目录下的 nana_build 文件夹里!”

这样做的好处是:

  • 保持源码整洁:Nana 的编译产物被隔离在了你的 out/build/.../nana_build 中,绝对不会污染、弄脏你原本干净的 ../nana 源码文件夹。
  • 一键清理:当你哪天在 VS 里点击“清理解决方案”时,它能准确地把这个 ${CMAKE_CURRENT_BINARY_DIR} 下的垃圾文件全部删干净。