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></zlib> -


















