在使用git的企业C ++项目中管理Makefile

时间:2015-10-27 13:49:52

标签: c++ git makefile

我已经开始了一个用c ++编写的项目。我有一个大约6人的团队,我的所有团队都使用Netbeans来开发c ++。我们使用stash(git)来管理代码,并使用pull请求将代码添加到存储库。 通过消磨时间,我们在拉取请求和管理make文件时面临一个大问题。 Netbeans构建一个configuration.xml文件和两个不同的make文件,用于调试和发布。当团队的每个成员添加文件或更改编译设置时,所有这些文件都会更改,当他/她的代码合并到主分支时,所有其他分支在make文件和配置中都会发生冲突。我认为这应该是c ++中企业项目中的常见问题但是我没有找到任何好的解决方案。

我提供了一些我的冲突的例子:

<<<<<<<
            <pElem>include/gmock</pElem>
            <pElem>include/gtest</pElem>
=======
            <pElem>/usr/include/ruby-1.9.1/x86_64-linux</pElem>
>>>>>>>

或者

<<<<<<<
    $(COMPILE.cc) -g -s -Iinclude -I. -Iinclude/X -Iinclude/X/P -I/usr/include/postgresql/9.3/server -I/usr/include/ruby-1.9.1 -Iinclude/dbo/W-Iinclude/log4cxx -Iinclude/gmock -Iinclude/gtest -I. -Iinclude/log4cxx -std=c++11 `cppunit-config --cflags` -MMD -MP -MF "$@.d" -o ${TESTDIR}/tests/Y.o tests/Z.cpp
=======
    $(COMPILE.cc) -g -s -Iinclude -I. -Iinclude/X-Iinclude/X/P -I/usr/include/postgresql/9.3/server -I/usr/include/ruby-1.9.1 -Iinclude/dbo/W-Iinclude/log4cxx -I/usr/include/ruby-1.9.1/x86_64-linux -I. -std=c++11 `cppunit-config --cflags` -MMD -MP -MF "$@.d" -o ${TESTDIR}/tests/Y.o tests/Z.cpp
>>>>>>>

有没有人有解决这个问题的好方法?

1 个答案:

答案 0 :(得分:3)

在版本控制系统中管理生成的文件通常不是一个好习惯。在你的情况下恢复这个可能很困难,所以我看到你的问题的以下方法:

  1. 从git中删除生成的makefile。而只是添加到git Netbeans项目文件,并让开发人员从中生成其余的。这仍然有一个缺点,因为您使用的是像NetBeans这样的IDE,项目文件仍然是生成的文件。无论如何都会发生冲突。开发人员可能会尝试修复冲突,但这是一个容易出错的任务,他们无法知道它是否真的正确,因为项目文件的格式只有NetBeans的开发人员知道IDE的用户不应该处理它。

  2. 而不是NetBeans使用其他工具来组织构建。有几种工具可以为你生成makefile,比如CMake或autoconf。像SCons这样的其他人不使用makefile,而是基于python脚本。这些工具的适用程度取决于特定项目的规模,要求和可用性。这些工具的共同点是,您可以使用工具定义的语法创建一些定义项目的文件或文件集(即组成文件的文件)。这是你放在git中的内容,而不是从它生成的文件。并且这些文件在您的控制之下,因此当发生冲突时,您知道如何修复它们。

  3. 如果项目很小,你甚至可以手工制作一个Makefile并将这个makefile放在git中。

  4. 在任何情况下都要记住项目配置上的冲突必然会发生,你无法避免这种情况。你可以尝试使这些condlicts更容易管理。

    我个人使用C ++工作,甚至不使用IDE。我们使用GCC,使用SCons组织项目,并使用外部编辑器(如vim或Sublime Text)进行编辑。