我希望能够在命令输出改变时触发CMake配置;具体来说,我想让CMake在
大部分问题可以通过监视
当出现这种情况时,git文件没有任何更改,只是git注意到与存储状态的差异,因此我无法在这里对任何文件进行
所以我想知道是否有办法让CMake运行git命令,注意到输出的差异并触发重新配置,这几乎需要类似于预重新配置检查阶段的东西。
不确定是否可能实现或是否有任何其他方法可以实现这种行为?
git describe --always --dirty
的输出与上一次配置CMake不同时进行配置。大部分问题可以通过监视
HEAD
文件并解析其中的symref到refs/heads/[branch]
,然后使用configure_file(...)
将这些链接起来来解决,但是这不能检测到树处于脏状态时(即存在未提交的修改)。在这种情况下,git describe --always --dirty
会在输出中添加-dirty
后缀。当出现这种情况时,git文件没有任何更改,只是git注意到与存储状态的差异,因此我无法在这里对任何文件进行
configure_file(...)
以使CMake注意到更改并重新配置。所以我想知道是否有办法让CMake运行git命令,注意到输出的差异并触发重新配置,这几乎需要类似于预重新配置检查阶段的东西。
不确定是否可能实现或是否有任何其他方法可以实现这种行为?
git describe
字符串编译到版本信息中,以确保我知道它是从哪个git提交版本构建的,并且至关重要的是,如果有来自该提交的修改。如果可以避免,我不想在其上添加元构建系统,仅仅为了获得那一个小功能片段,我也不明白为什么它会陷入鸡生蛋或蛋生鸡的局面? - rblkadd_custom_target(BuildVersion COMMAND ${CMAKE_EXECUTABLE} -P <script_file>)
的方式生成该文件。这会以脚本模式运行CMake,您可以在其中使用常规的configure_file
命令。进一步,使用add_dependencies(<exec-target> BuildVersion)
命令将确保如果脚本更改了version.h文件,则可执行文件将被重新构建。 - Tsyvarev