C++;能够预先编译依赖项的构建系统 我正在为C++游戏项目设置一个构建环境。我们的主要需求是不仅能够构建游戏代码,还能够构建其依赖项(Ogre3D、Cegui、boost等)。此外,我们希望能够在Linux和Windows上构建,因为我们的开发团队由使用不同操作系统的成员组成

C++;能够预先编译依赖项的构建系统 我正在为C++游戏项目设置一个构建环境。我们的主要需求是不仅能够构建游戏代码,还能够构建其依赖项(Ogre3D、Cegui、boost等)。此外,我们希望能够在Linux和Windows上构建,因为我们的开发团队由使用不同操作系统的成员组成,c++,build-process,dependencies,cmake,C++,Build Process,Dependencies,Cmake,Ogre3D将其用作构建工具。这就是为什么到目前为止我们的项目过于基于CMake。一旦在每个团队成员系统上手动设置了所有依赖项,我们就可以很好地编译,因为CMake能够找到库 问题是是否有一种可行的方法来自动设置依赖项。作为一个java开发者,我知道Maven,但是C++世界中存在什么工具? 更新:谢谢你的回答和链接。在接下来的几天里,我将试用一些工具,看看哪些工具符合我们的要求,首先是CMake。到目前为止,我确实与autotools有过共同的经历,尽管我很喜欢这些文档(autobook是一

Ogre3D将其用作构建工具。这就是为什么到目前为止我们的项目过于基于CMake。一旦在每个团队成员系统上手动设置了所有依赖项,我们就可以很好地编译,因为CMake能够找到库

问题是是否有一种可行的方法来自动设置依赖项。作为一个java开发者,我知道Maven,但是C++世界中存在什么工具?
更新:谢谢你的回答和链接。在接下来的几天里,我将试用一些工具,看看哪些工具符合我们的要求,首先是CMake。到目前为止,我确实与autotools有过共同的经历,尽管我很喜欢这些文档(autobook是一本非常好的读物),但我担心autotools不适合在Windows本机上使用


有些人建议让某个IDE处理依赖关系管理。我们由使用所有可能的技术从纯Vim到完全成熟的EclipseCDT或VisualStudio进行编码的个人组成。这就是CMake允许使用一些灵活性来生成本机项目文件的地方

在许多*nix系统上,使用了某种包管理器或构建系统。最常见的源代码是GNU自动工具,我听说这是一个极度悲伤的来源。但是,通过一些脚本和DEP的在线存储,您可以设置类似的内容:

  • 在项目Makefile中,创建覆盖依赖项的目标(可选包含子目标)
  • 在每个依赖项的目标中,首先检查dep源是否在项目中(在*nix上,您可以使用
    touch
    进行此操作,但可以更彻底)
  • 如果没有dep,您可以使用
    curl
    等下载dep
  • 在所有情况下,让dep目标对依赖项的Makefile(或其他配置脚本/构建文件)进行递归make调用(
    make;make-install;make-clean;
    etc)。如果dep已经构建和安装,make将很快返回

根据每个dep的安装程序(也许安装程序是交互式的?),将有许多角落的情况会导致这种情况发生,但这种方法应该涵盖总体思路。

有几个有趣的make替换,可以自动跟踪隐式依赖项(从头文件),是跨平台的,可以处理生成的文件(例如着色器定义)。我曾经使用的两个示例是和/

我不知道有什么跨平台的方法可以让*make自动跟踪依赖项。 最好的办法是使用一些扫描源文件(或者C++编译器做)的脚本,并找到包含的(条件编译使这个棘手),并生成一部分MaFag文件。
但是,无论什么时候发生变化,您都需要调用此脚本。

在过去的几个月里,我在参与的几个项目中一直在使用GNU自动工具(Autoconf、Automake、Libtool),我认为它工作得很好。事实上,它需要一点时间来适应语法,但是我成功地将它成功地应用于一个项目,它需要Python脚本、C库和C++应用程序的分发。当我第一次在这里问类似的问题时,我会给你一些帮助我的链接

  • 提供了关于整个系统的最佳文档,但非常冗长
  • 这解释了一切是如何运作的。Autoconf基于您将要编译的平台配置项目,Automake为您的项目构建Makefiles,Libtool处理库
  • a应该可以帮助你开始
更多链接:

  • 我不确定的一件事是GNU自动工具的任何类型的Windows包装器。我知道您可以在Cygwin中使用它,但对于在Windows平台上实际分发文件和依赖项,您最好使用Windows MSI安装程序(或者可以在Visual Studio中打包项目的安装程序)

    如果要分发依赖项,可以将它们设置在不同的子目录下,例如libzip,并使用特定的Makefile.am条目来构建该库。执行make安装时,库将安装到configure脚本确定它应该使用的lib文件夹中

    祝你好运

    问题是是否有一种可行的方法来自动设置依赖项

    你说的“设置”是什么意思

    正如您所说,一旦依赖项在机器上,CMake将编译所有内容。您只是在寻找一种打包依赖项源的方法吗?一旦有了所有的源代码,您就只需要CMake和一个构建工具(gcc、nmake、MSVS等)

    编辑:旁注,CMake有一个file命令,如果需要可以用来下载文件:
    file(下载url文件[TIMEOUT TIMEOUT][STATUS STATUS][LOG LOG])

    编辑2:是CMake的另一个工具,可用于打包文件,并在各种平台上分发。它可以为Windows创建NSI,并为*nix创建.deb或.tgz文件。

    在我的工作地点(我们为电源保护构建嵌入式系统),我们使用CMake解决了这个问题。我们的设置允许从不同位置运行cmake

    /
    CMakeLists.txt "install precompiled dependencies and build project"
       project/
          CMakeLists.txt "build the project managing dependencies of subsystems"
          subsystem1/
             CMakeLists.txt "build subsystem 1 assume dependecies are already met"
          subsystem2/
             CMakeLists.txt "build subsystem 2 assume dependecies are already met"
    
    诀窍是确保每个CMakeLists.txt文件都可以单独调用,但顶层文件仍然可以正确构建所有内容。从技术上讲,我们是这样做的