【问题标题】:Interdependent projects with svn and CMake - looking for advicesvn 和 CMake 相互依赖的项目 - 寻求建议
【发布时间】:2011-04-27 01:50:42
【问题描述】:

对于这个冗长的问题,我深表歉意,但这是我一直在思考的问题,我无法想出一个好的解决方案。

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

实用程序
渲染系统 - 取决于实用程序
PhysicsSystem - 取决于实用程序
GameEngine - 依赖于 Utility、RenderSystem 和 PhysicsSystem
游戏 - 依赖于 Utility 和 GameEngine

我们正在使用 svn 和 CMake。

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

我们目前的 svn 设置如下:

实用程序
RS
附言
通用电气
游戏
垃圾箱

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

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

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

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

这种方法有几个烦恼:

  • 提交时,提交窗口中充满了 .dll 和 .libs
  • 相反,当更新更新窗口时,会出现 .dlls 和 .libs 混乱
  • 如果程序员 A 构建整个项目并提交,程序员 B 将与 dll 和 lib 文件发生冲突。只有当两个程序员共同处理一个项目时才会发生这种情况,并且由于二进制文件是从代码生成的,因此如何解决冲突并不重要。这是一个额外的烦恼。
  • 有时程序员会从源代码生成两个构建,当重新构建一个时,必须将二进制文件从 bin 文件夹复制到另一个。这意味着 CMake 需要添加一个构建事件来复制在每次构建期间不同的任何二进制文件。
  • 每次构建项目时,都需要将所有二进制文件从源目录复制到构建目录(以更新从外部构建更改的任何内容),然后需要将构建的二进制文件复制回来从构建目录到源目录。这会导致大量文件复制并且容易出错。
  • 调试和发布有不同的二进制文件,如果程序员 A 在工作时在调试模式下构建,然后在提交前忘记构建发布,则标头和二进制文件将不匹配。

当前系统完成了我们想要保留的两件主要事情:有一个根源目录需要检出和更新,没有人想搞砸有多个要检出的东西;并且整个东西不必由每个程序员来构建,他们可以构建他们正在做的事情。

我希望有任何关于如何使这更顺畅的建议。在前端,它运行良好,但是必须实际处理 CMake 文件的人(我)非常沮丧。

【问题讨论】:

  • 更多信息:由于 CMake 不知道实际将构建哪些项目(有人可能同时在 Game 和 GameEngine 上工作,但只是构建 GameEngine)我必须添加源到- 将构建事件二进制复制到每个项目。每个构建后事件都执行完全相同的操作,将任何外部修改的二进制文件从源目录复制到构建目录。我真的很讨厌这样,但看不到解决办法......
  • 另外我忘了提一下,我们都在使用 VS2008-2010,(CMake 文件的)可移植性不是问题。

标签: svn dependencies cmake


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    相关资源
    最近更新 更多