You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake POST_BUILD自定义命令忽略文件依赖变更的技术问询

问题原因

add_custom_command(TARGET ... POST_BUILD) 的执行逻辑是仅当绑定的目标(这里是kernel)被重新构建时,才会触发命令并检查DEPENDS中的文件。如果只是修改了limine.cfg这类依赖文件,但kernel目标本身不需要重新编译(源码没变化),POST_BUILD命令不会执行。

解决方案

改用add_custom_target创建独立的自定义目标,让它同时依赖kernel目标和需要监控的文件,这样无论是kernel重建还是依赖文件变更,都会触发脚本执行。修改后的配置如下:

add_custom_target(
    build_kernel_iso ALL
    DEPENDS kernel build-iso.sh limine.cfg
    BYPRODUCTS ${CMAKE_BINARY_DIR}/kernel.iso
    COMMAND ./build-iso.sh $<TARGET_FILE:kernel> ${CMAKE_BINARY_DIR}/kernel.iso ${CMAKE_BINARY_DIR}/iso_root
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    VERBATIM
)

关键改动说明

  • ALL关键字:让这个目标成为默认构建目标的一部分,执行cmake --build build时会自动运行(如果不需要默认执行,可去掉该关键字,构建时需指定--target build_kernel_iso)。
  • DEPENDS kernel:保证kernel目标构建完成后才执行脚本,和原POST_BUILD的时序一致。
  • DEPENDS build-iso.sh limine.cfg:直接监控这些文件的变化,只要它们修改,就会触发目标执行。
  • BYPRODUCTS:告诉CMake生成的kernel.iso是构建产物,避免无意义的重复构建。

内容的提问来源于stack exchange,提问作者mat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:27:08