我有一个项目,我想在构建代码之前将补丁应用到 git repo,然后在创建可执行文件后取消应用该补丁。原因是我希望将补丁应用于构建,但我希望已修补的存储库在其主分支上保持干净。我注意到add_custom_command
似乎有这种能力,带有PRE_BUILD
和POST_BUILD
说明符。我试过这样的事情:
add_executable(foo ...)
# foo requires a patch to some library
target_link_libraries(foo ...)
add_custom_command(TARGET foo PRE_BUILD COMMAND git apply somepatch.patch)
add_custom_command(TARGET foo POST_BUILD COMMAND git apply --reverse somepatch.patch)
但是,如果仔细查看文档,他们会在关于speciferadd_custom_command
的部分中提到这一点:PRE_BUILD
在 Visual Studio 生成器上,在目标中执行任何其他规则之前运行。在其他生成器上,在 PRE_LINK 命令之前运行。
事实上,这就是发生的事情。该补丁仅在编译阶段之后和链接阶段之前应用。因此,在应用补丁之前正在编译代码。如何确保在编译代码之前执行补丁?