我想弄清楚如何定义我的构建环境。
我需要让它可以移植到Cygwin和Linux。
假设每个模块/客户都使用自己的Makefile构建,我如何配置我的makefile以动态指向正确的依赖版本?
我应该如何设置我的CM仓库以允许每个项目和模块的开发团队独立工作,而不是每次创建新分支时都需要大量的手动配置?
我使用以下目录结构,但它似乎不足以满足我的需求。
./fooLibrary
./include
./lib
./barLibrary
./include
./lib
./plugins
./pluginX
./include
./lib
./pluginY
./include
./lib
./pluginZ
./include
./lib
./projects
./customer1
./bin
./obj
./projects/customer2
./bin
./obj
./projects/unittests
./bin
./obj
我正在为每个模块创建一个带有自己的include / lib目录的版本化安装目录,但这似乎有些过分,我从来没有真正喜欢版本化版本的产品。即。
./fooLibrary
./src
./1.0
./include
./lib
./1.1
./include
./lib
./1.2
./include
./lib
./1.2.1
./include
./lib
我只是想让开发团队保持简单。
编辑: 重要的是要注意我还没有任何工作。我觉得我正在努力做正确的事情,但是我在努力做到正确的时候正在挣扎。
答案 0 :(得分:1)
关于CM部分,如果您正在使用GIT,则可以为顶级目录和基本构建系统提供一个主存储库,并为每个子项目提供submodules。
对于构建,我建议您使每个子项目独立,然后按依赖顺序列出顶级容器项目中的子项目列表。每个子项目都安装到一个特定的目录中,顶层容器项目将标志传递给每个项目,告诉他们这个安装目录的位置,以便他们可以找到头文件和库。使此(临时)安装目录镜像到实际安装目录,因此在需要时可以轻松复制到实际安装目录。
如果不是所有文件都应该从临时安装目录复制到实际安装目录,请让每个子项目生成一个文件,告诉我们应该复制哪些文件。
对于与平台无关的构建系统,我建议CMake。它可以处理配置和生成makefile,用于构建,比您可能需要的更多平台和编译器。
我希望这对你有意义。