我想在构建时将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命令,认为我然后生成" real"项目依赖于此,但NetBeans似乎不允许我创建一个“什么也不做”的项目。 (即它没有源文件,并且不生成库或可执行文件 - 它只生成版本文本文件)。
我使用NetBeans 7.3 for C ++和"自动复制"远程构建的选项。一种可能的解决方案可能是将NFS / Samba模式与存储在服务器上的Git存储库一起使用,但这将是相当具有破坏性的,因为该项目已经有多个开发人员已经使用自动复制很长时间了。因此,在开始远程构建之前,有一个解决方案可以在NetBeans本地生成一些文件。
答案 0 :(得分:1)
一种解决方案是在启动Netbeans作业时让该版本文件保持最新状态。
post-commit hook可以在正确的位置生成该文件,以供您的Netbean作业阅读。