1

我想在构建时将 Git 修订版 (SHA1) 嵌入到我的可执行文件中。我可以像这样在本地进行:

 git log -1 --format='%h' >version
 objcopy --input binary --output elf64-x86-64 version version.o
 # link version.o into the executable

问题是,我正在使用NetBeans(在 Windows 上)远程构建(在 Linux 上)。这有点自相矛盾: git 命令似乎需要在本地机器(源所在的位置)上运行,但 objcopy 命令需要在远程服务器(构建发生的位置)上运行。这是一个问题,因为虽然 NetBeans 允许我编辑项目的 Makefile 以插入预构建步骤,但我无法弄清楚如何或在何处放置 git 命令,以便它在远程构建步骤之前在本地计算机上运行。

我尝试制作一个单独的 NetBeans 项目来在 localhost 上运行 git 命令,以为我会让“真正的”项目依赖于此,但 NetBeans 似乎不允许我创建一个“什么都不做”的项目(即它没有源文件,并且不生成库或可执行文件——它只会生成版本文本文件)。

我将 NetBeans 7.3 for C++ 与远程构建的“自动复制”选项一起使用。一个可能的解决方案可能是使用 NFS/Samba 模式和存储在服务器上的 Git 存储库,但这会造成相当大的破坏,因为该项目已经有多个开发人员使用自动复制很长时间了。因此,如果有一个解决方案可以在开始远程构建之前在 NetBeans 中本地生成一些文件,那就太好了。

4

1 回答 1

1

一种解决方案是在启动 Netbeans 作业时使该版本文件保持最新。

提交后挂钩可以在正确的位置生成该文件,供您的 Netbean 作业读取。

于 2013-08-19T06:12:19.920 回答