跳到正文

CMake

共 2 篇 · 全部标签

CMake 现代用法:生成器决定一切形状,可见性关键字决定谁能编译过

实测:本机 CMake 3.30.5 的生成器列表里最高只到 "Visual Studio 17 2022"(被标为默认),而 PATH 上明明装着 VS 18; 同一个工程不写 `-G` 时 `CMAKE_CONFIGURATION_TYPES=Debug;Release;MinSizeRel;RelWithDebInfo`、 `CMAKE_BUILD_TYPE` 为空,写 `-G "MinGW Makefiles"` 时两者都是空串。多配置目录里 `cmake --build` 不带 `--config` 就落在 Debug,加了 `--config Release` 之后 Debug 与 Release 两份 exe **同时存在**; 单配置生成器加 `--config` 是 rc=0 静默忽略。`CMAKE_BUILD_TYPE=Release` 在 flags.make 里展开成 `-O3 -DNDEBUG`,Debug 只有 `-g`。可见性实测:`PRIVATE` 的头目录不传播,消费者直接 `fatal error: core.h: No such file or directory`,`PUBLIC` 才编得过;`INTERFACE` 库的 `-DINTF_MARK=11` 出现在 compile_commands.json(5 条)里。`find_package(Boost REQUIRED)` 失败是 rc=1 带 FindPackageHandleStandardArgs 调用栈,不加 REQUIRED 就 rc=0 且 `Boost_FOUND` 为空。 把别的源码目录指到同一个 `-B` 会得到 "does not match the source … used to generate cache"。

Qt 6 框架总览与工程搭建

实测:Q_OBJECT 让 108 行头文件膨胀成 1109 行 C++、单 TU 编译 +26%,但对象体积一字节不加;忘跑 moc 的签名是 `undefined reference to 'vtable for Widget'`;CMAKE_PREFIX_PATH 不写,CMake 会静默挑中另一套 Qt 再在链接期炸出 3 条 __imp_ 未定义引用;w.show() 返回 0.0ms 且一次 Paint 都没派发。