我想在构建时将 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 中本地生成一些文件,那就太好了。