.o文件或构建版本控制的最佳实践是什么?

问题描述 投票:1回答:3

我有一个C项目源(本例中是Linux内核)和Makefile。

我发现这很痛苦,因为我做了修改,我在分支之间切换,然后我忘记了这些目标文件与哪些提交有关。

我可以在构建过程中自动进行版本控制吗?

例如(我认为可能是一个很好的工作流程,也许这很愚蠢):

  1. 迫使我确保gaz工作空间在qazxsw poi之前是干净的
  2. 保持构建版本自动化。将一个构建与目标文件和源文件相关联。
  3. 我可以检查任何构建
  4. 我可以知道哪些make文件是最新的(与源代码工作空间相比)。像.o

但最重要的是,源代码git树不能被干扰。

git makefile build version-control
3个回答
2
投票

一种常见的解决方案是将信息嵌入到人工制品中以识别它。

例如,如果您有许多控制编译器的git status设置,请将它们放在一个字符串中。

-D parameter=value

然后,您可以使用将此字符串返回给调用者的代码,或者您可以使用const volatile static char build[] = "parameter PARAMETER has value " PARAMETER; strings检查二进制文件以查看嵌入其中的信息。

有关更多信息,请参阅less


1
投票

由于Does gcc have any options to add version info in ELF binary file?文件是由C编译器(C项目的输出文件)生成的目标文件,因此不必在git repo中对.o文件进行版本控制。

您只需要管理git仓库中的源代码(例如C项目和Makefile)。

对于输出文件,您应该在.o中忽略它们:

.gitignore

1
投票

关于目标文件的最佳实践是git-ignore它们:

touch .gitignore
echo **/*.o >> .gitignore
git add .
git rm **/*.o --cached 
git add .
git commit -m 'ignore .o files'
git push

有关分支的构建过程的最佳实践是为不同的分支分别设置长期运行的工作树:

echo *.o >> .gitignore

并且不要在这些工作树中切换分支。

© www.soinside.com 2019 - 2024. All rights reserved.