与svn和CMake相互依存的项目-寻求建议

与svn和CMake相互依存的项目-寻求建议,svn,dependencies,cmake,Svn,Dependencies,Cmake,我为这个冗长的问题道歉,但这是我思考了一段时间的事情,我不能想出一个好的解决办法 我是一个团队的一员,这个团队正在处理多个项目,这些项目以分层的方式相互依赖,我正在努力解决一些问题。项目的结构如下(这是一个游戏): 实用工具 渲染系统-取决于实用程序 物理系统-取决于实用程序 游戏引擎-取决于实用程序、渲染系统和物理系统 游戏-取决于实用程序和游戏引擎 我们正在使用svn和CMake 我们有几个程序员,每个人都在处理不同的组件,每次都有一个更新,比如说RenderSystem,游戏程序员不想重新

我为这个冗长的问题道歉,但这是我思考了一段时间的事情,我不能想出一个好的解决办法

我是一个团队的一员,这个团队正在处理多个项目,这些项目以分层的方式相互依赖,我正在努力解决一些问题。项目的结构如下(这是一个游戏):

实用工具
渲染系统-取决于实用程序
物理系统-取决于实用程序
游戏引擎-取决于实用程序、渲染系统和物理系统
游戏-取决于实用程序和游戏引擎

我们正在使用svn和CMake

我们有几个程序员,每个人都在处理不同的组件,每次都有一个更新,比如说RenderSystem,游戏程序员不想重新编译整个东西

我们目前的svn设置如下:

Util
RS
PS
通用电气
游戏
垃圾箱

二进制文件需要在svn中,这样程序员就不必编译他们不处理的二进制文件。这意味着,在本地端,二进制文件必须存在于要链接的源目录中,而那些相同的二进制文件也必须存在于要运行的可执行文件的构建目录中(动态链接)

在配置CMake时,每个程序员都会选择要构建的项目和只使用预编译二进制文件的项目

每当构建项目时,二进制文件都会自动复制到bin文件夹(并因此提交到svn)。当程序员更新并获取新的二进制文件时,它们将被复制到构建目录

我们目前没有构建服务器,因此无法自动构建二进制文件

这种方法有几个缺点:

  • 提交时,提交窗口中充斥着.dll和.libs
  • 相反,当更新更新窗口时,会被.dll和.libs弄得乱七八糟
  • 如果程序员A构建整个过程并提交,那么程序员B将与DLL和lib文件发生冲突。只有当两个程序员共同处理一个项目时,才会发生这种情况,因为二进制文件是从代码生成的,所以冲突如何解决并不重要。这是一个额外的烦恼
  • 有时程序员会从源代码生成两个版本,当其中一个被重建时,二进制文件必须从bin文件夹复制到另一个文件夹。这意味着CMake需要添加一个构建事件来复制每个构建期间不同的任何二进制文件
  • 每次生成项目时,都需要将所有二进制文件从源目录复制到生成目录(以更新从外部生成更改的任何二进制文件),然后需要将生成的二进制文件从生成目录复制回源目录。这会导致大量文件复制,并且容易出错
  • 调试和发布有不同的二进制文件,如果程序员A在工作时在调试模式下构建,然后在提交之前忘记构建发布,那么头文件和二进制文件将不匹配
当前的系统完成了两件我们希望保留的主要事情:有一个根源目录需要签出和更新,没有人希望有多个东西要签出;整个过程不必由每个程序员来构建,他们可以构建他们正在工作的东西

我想知道如何让这更顺利。在前端,它工作得很好,但实际处理CMake文件(me)的人非常沮丧。

该命令指定链接器搜索库(.lib文件)的路径。您可以使用它首先在包含开发人员选择在本地构建的库的目录中进行搜索,然后在包含从Subversion签出的库的目录中进行搜索。类似地,要运行应用程序,开发人员必须配置路径,以便在包含开发人员选择在本地生成的.dll文件的目录中搜索.dll文件,然后在包含从Subversion签出的.dll文件的目录中搜索


当您想将更改后的二进制文件提交到Subversion时,首先将本地生成的二进制文件复制到包含二进制文件的工作副本目录。

更多信息:因为CMake不知道实际将生成哪些项目(可能有人同时在游戏和GameEngine上工作,但只需生成GameEngine)我必须将源代码到二进制副本生成事件添加到每个项目中。每个生成后事件都执行完全相同的操作,将任何外部修改的二进制文件从源目录复制到生成目录。我真的很讨厌这一点,但并没有找到解决的办法……而且我忘了提到,我们都在使用VS2008-2010,而且(CMake文件的)可移植性并不是一个问题。