gpt4 book ai didi

git - 在 CLion 远程工具链中跟踪 git 提交时如何触发 cmake 重新配置

转载 作者:行者123 更新时间:2023-12-05 07:16:48 26 4
gpt4 key购买 nike

背景

我有一个使用 CMake 的 C++ 项目。我希望将当前的 git 提交(和“-dirty”标志)以一种在 git 提交更改时自动更新的方式编码到应用程序中,例如在成功的 git commit 之后git checkout.

我知道我可以通过让 CMake 依赖于 .git/index 文件来做到这一点,给这个:

find_package(Git QUIET REQUIRED)

execute_process(
COMMAND "${GIT_EXECUTABLE}" describe --match=NeVeRmAtCh --always --abbrev=8 --dirty
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
RESULT_VARIABLE res
OUTPUT_VARIABLE GIT_COMMIT
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)

set_property(GLOBAL APPEND
PROPERTY CMAKE_CONFIGURE_DEPENDS
"${CMAKE_SOURCE_DIR}/.git/index")

target_compile_definitions(mylib PUBLIC GIT_COMMIT=\"${GIT_COMMIT}\")

然后目标程序(C++)可以只使用GIT_COMMIT 预处理器符号。

所以我的要求是:

  • 应用程序将包含其构建来源的 git 提交(如果存在未提交的更改,则包含 -dirty 后缀),
  • 如果 git commit 或 dirty 标志状态发生变化,编译到应用程序中的 git commit 将被更新,
  • 如果 git 提交未更改,则不应重新编译或重新链接应用程序。

此技术满足本地构建的这些要求。

并发症

工作中的 Spanner 是我正在使用 CLion 在 Raspberry Pi 上远程编译应用程序(关键问题)(具体细节并不重要)。由于 CLion 的工作方式,.git 目录(因此 .git/index)不会复制到远程系统。因此,在 RPi 上编译代码时,.git/index 根本不存在。因此,该技术失败了,因为 RPi 上的构建系统根本无法获得所需的信息。

问题

所以我想以某种方式在源目录中自动创建一个新文件(以便 CLion 将其同步到 RPi),该文件基于 .git/index,或者也许只是 git describe 的输出,在运行 CLion 的主机上。每当 git commit 更改时,我都需要更新此文件。内容可用于填充 GIT_COMMIT。如果此文件附加到 CMAKE_CONFIGURE_DEPENDS,则无论内容如何,​​当文件上的时间戳发生变化时都会触发重新配置。相反,我希望仅在文件的内容发生更改时才进行重新配置,因为每次生成的 makefile 运行时它很可能会自动更新,但不会更改实际提交。

解决这个问题的正确方法是什么?

在这一点上,我想知道我是否使事情过于复杂,所以如果有任何可能建议替代方法的评论,我将不胜感激。

最佳答案

如果您要提取源代码以部署到非 Git 树中,请使用 git archiveexport-substexport-ignore 用于自定义部署内容的属性。例如,您可以在选定文件的标记部分上运行 git log 的格式化程序,在提取的提交 ID 和消息以及作者等中进行替换。

关于git - 在 CLion 远程工具链中跟踪 git 提交时如何触发 cmake 重新配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59078882/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com