post_build阶段add_custom_command不生效的根本原因是cmake仅依赖目标输出时间戳触发命令,未感知dll等外部依赖变化;须显式声明depends(含绝对路径或生成器表达式)和byproducts,并用copy_if_different保障健壮性。

为什么 add_custom_command 在 POST_BUILD 阶段不生效?
常见现象是:DLL 没拷过去,或者只在首次构建时拷了一次,后续修改源码重建就失效了。根本原因是 CMake 默认把 POST_BUILD 命令绑定到「生成目标」(如 myapp.exe)上,但该目标的「输出时间戳」没变时,CMake 认为无需重执行命令——哪怕你改了 DLL 路径或新增了依赖。
正确做法是让 CMake 明确感知依赖变化。必须显式声明 DEPENDS 和 BYPRODUCTS,且不能只写 DLL 文件名,得用绝对路径或 $<...></...>
<myapp></myapp>
<zlib><myapp></myapp></zlib>
-
<zlib></zlib> -
<myapp></myapp>
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











