AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 32
Debug vs Release — 优化、符号与行为
C++ SELF
等级 32,
课时 0
解析 C++ 中
Debug
与
Release
构建的真实差别:优化如何影响调试器中的“可观测性”,为什么需要 debug symbols,为什么发布版调试看起来“奇怪”,以及宏
NDEBUG
如何禁用
assert
。结尾给出基于
TASKBOX_TRACE
风格的 debug 日志实用模板和常见错误清单,导致“Debug 能运行,但 Release 不行”的典型原因。
Out-of-source builds — build 文件夹应当独立
C++ SELF
等级 32,
课时 1
我们讨论在使用
CMake
的项目中采用
out-of-source
构建的实践:为什么编译产物应该与源代码分离、通常会出现在
build/
中的内容有哪些、
in-source
构建有哪些风险、如何保持项目根目录“干净”、为什么需要多个 build 目录(如
build-debug/
,
build-release/
)以及哪些错误最常导致构建和心情崩溃。
CMake Presets:可复现的预设
C++ SELF
等级 32,
课时 2
解析
CMake Presets
作为使项目构建可复现的一种方式:把“官方”构建场景固定在
CMakePresets.json
中,分离
configure
/
build
/
test
等阶段,使用预设继承和类似
CMAKE_CXX_STANDARD
与
CMAKE_BUILD_TYPE
的变量,并且讨论常见错误(共用
binaryDir
、忘记 configure 步骤、绝对路径以及生成器的细节)。
通过 FetchContent 引入依赖
C++ SELF
等级 32,
课时 3
讲解如何在 CMake 中以可重现且“以 target 为导向”的方式使用
FetchContent
来引入外部库:基础模式
FetchContent_Declare()
→
FetchContent_MakeAvailable()
,遵循“先声明——后引入”的规范,演示如何引入
fmt
并通过
target_link_libraries
链接到
fmt::fmt
,以及通过
GIT_TAG
(最好使用 commit hash)来固定版本,和使用归档的
URL
+
URL_HASH
的变体。
multi-target 项目结构:app + lib + tests
C++ SELF
等级 32,
课时 4
讲解如何在 CMake 中组织 multi-target 项目:把公共逻辑提取到库中(
lib
/
budget_core
),做精简的应用程序(
app
)和单独用于校验的可执行文件(
tests
)。在实践中通过
target_link_libraries
连接目标,通过
target_include_directories
以
PUBLIC
模式配置公共头文件,并讨论典型错误,例如
tests
依赖于
app
以及“所有逻辑都在
main()
中”。
Please enable JavaScript to continue using this application.