C++;能够预先编译依赖项的构建系统 我正在为C++游戏项目设置一个构建环境。我们的主要需求是不仅能够构建游戏代码,还能够构建其依赖项(Ogre3D、Cegui、boost等)。此外,我们希望能够在Linux和Windows上构建,因为我们的开发团队由使用不同操作系统的成员组成
Ogre3D将其用作构建工具。这就是为什么到目前为止我们的项目过于基于CMake。一旦在每个团队成员系统上手动设置了所有依赖项,我们就可以很好地编译,因为CMake能够找到库 问题是是否有一种可行的方法来自动设置依赖项。作为一个java开发者,我知道Maven,但是C++世界中存在什么工具?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是一
更新:谢谢你的回答和链接。在接下来的几天里,我将试用一些工具,看看哪些工具符合我们的要求,首先是CMake。到目前为止,我确实与autotools有过共同的经历,尽管我很喜欢这些文档(autobook是一本非常好的读物),但我担心autotools不适合在Windows本机上使用
有些人建议让某个IDE处理依赖关系管理。我们由使用所有可能的技术从纯Vim到完全成熟的EclipseCDT或VisualStudio进行编码的个人组成。这就是CMake允许使用一些灵活性来生成本机项目文件的地方 在许多*nix系统上,使用了某种包管理器或构建系统。最常见的源代码是GNU自动工具,我听说这是一个极度悲伤的来源。但是,通过一些脚本和DEP的在线存储,您可以设置类似的内容:
- 在项目Makefile中,创建覆盖依赖项的目标(可选包含子目标)
- 在每个依赖项的目标中,首先检查dep源是否在项目中(在*nix上,您可以使用
进行此操作,但可以更彻底)touch
- 如果没有dep,您可以使用
等下载depcurl
- 在所有情况下,让dep目标对依赖项的Makefile(或其他配置脚本/构建文件)进行递归make调用(
etc)。如果dep已经构建和安装,make将很快返回make;make-install;make-clean;
根据每个dep的安装程序(也许安装程序是交互式的?),将有许多角落的情况会导致这种情况发生,但这种方法应该涵盖总体思路。有几个有趣的make替换,可以自动跟踪隐式依赖项(从头文件),是跨平台的,可以处理生成的文件(例如着色器定义)。我曾经使用的两个示例是和/ 我不知道有什么跨平台的方法可以让*make自动跟踪依赖项。 最好的办法是使用一些扫描源文件(或者C++编译器做)的脚本,并找到包含的(条件编译使这个棘手),并生成一部分MaFag文件。
但是,无论什么时候发生变化,您都需要调用此脚本。在过去的几个月里,我在参与的几个项目中一直在使用GNU自动工具(Autoconf、Automake、Libtool),我认为它工作得很好。事实上,它需要一点时间来适应语法,但是我成功地将它成功地应用于一个项目,它需要Python脚本、C库和C++应用程序的分发。当我第一次在这里问类似的问题时,我会给你一些帮助我的链接
- 提供了关于整个系统的最佳文档,但非常冗长李>
- 这解释了一切是如何运作的。Autoconf基于您将要编译的平台配置项目,Automake为您的项目构建Makefiles,Libtool处理库李>
- a应该可以帮助你开始
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文件都可以单独调用,但顶层文件仍然可以正确构建所有内容。从技术上讲,我们是这样做的