首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在跟踪CLion远程工具链中的git提交时触发cmake重新配置

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

Stack Overflow用户
提问于 2019-11-27 21:46:18
回答 1查看 367关注 0票数 3

背景

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

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

代码语言:javascript
运行
复制
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提交或脏标志状态更改,编译到应用程序中的git提交将被更新,如果git提交没有更改,则不应该重新编译或重新链接应用程序。

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

并发症

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

问题

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

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

在这一点上,我想知道我是不是把事情搞得太复杂了,所以我希望有任何意见,可能会提出另一种方法,请。

EN

回答 1

Stack Overflow用户

发布于 2019-11-27 22:30:17

如果要将要部署到非Git树中的源提取出来,请使用git archive以及export-substexport-ignore属性自定义部署的内容。例如,您可以在选定文件的标记部分上运行git log的格式化程序,在提取的提交id和消息以及author中进行子处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59078882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档