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

当Post Build命令的依赖项变更时,如何重建目标?

问题翻译

我使用custom_command作为POST_BUILD步骤对可执行文件进行签名,该命令依赖于一个生成签名证书的目标。可执行文件目标也通过add_dependency依赖于该证书生成目标。当证书被意外删除后,构建会生成新证书,但不会触发所有可执行文件的重建(因其依赖项未变更),且POST_BUILD自定义命令也不会执行,导致证书与已签名的可执行文件不匹配。如何让可执行文件重建/链接,或仅在证书文件变更后执行Post Build步骤?

解决方案

方案1:让POST_BUILD命令直接依赖证书文件

问题核心是原POST_BUILD命令仅依赖证书生成目标,而非证书文件本身。修改add_custom_command,将证书文件路径加入DEPENDS列表,这样证书文件的修改(包括删除后重建)会触发签名命令重新执行:

# 假设证书生成目标为generate_cert,生成的证书路径为${CMAKE_BINARY_DIR}/cert.pem
add_custom_command(TARGET my_exe POST_BUILD
    COMMAND sign_tool sign $<TARGET_FILE:my_exe> --cert ${CMAKE_BINARY_DIR}/cert.pem
    DEPENDS generate_cert ${CMAKE_BINARY_DIR}/cert.pem  # 新增证书文件依赖
)
add_dependencies(my_exe generate_cert)

这个方案无需重建可执行文件,仅在证书变化时重新签名,是最轻量化的解决方式。

方案2:将证书文件设为可执行文件的链接依赖

如果需要确保证书变化时可执行文件强制重新链接(进而触发POST_BUILD步骤),可以通过LINK_DEPENDS属性将证书文件设为可执行文件的链接依赖:

set_target_properties(my_exe PROPERTIES
    LINK_DEPENDS ${CMAKE_BINARY_DIR}/cert.pem
)
add_dependencies(my_exe generate_cert)

当证书文件修改时间变更时,CMake会判定可执行文件的链接依赖发生变化,自动触发重新链接,之后POST_BUILD签名步骤也会随之执行。

方案3:用自定义目标管理签名步骤

创建专门的签名目标,让它同时依赖可执行文件和证书文件,再将该目标加入默认构建流程:

add_custom_target(sign_my_exe
    COMMAND sign_tool sign $<TARGET_FILE:my_exe> --cert ${CMAKE_BINARY_DIR}/cert.pem
    DEPENDS my_exe ${CMAKE_BINARY_DIR}/cert.pem
)
add_dependencies(sign_my_exe generate_cert)
# 将签名目标加入默认构建目标(适配多数CMake版本)
add_dependencies(${CMAKE_PROJECT_NAME} sign_my_exe)

这种方式适合需要集中管理多个签名任务的场景,确保每次构建都会检查证书状态并执行必要的签名操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 11:14:56