便携式构建环境

时间:2015-07-06 19:16:47

标签: c++ svn configuration makefile

我想弄清楚如何定义我的构建环境。

  • 我有多个可重复使用的独立模块,这些模块是按照自己的发布计划开发的。
  • 我还有多个客户,每个客户都有自己的自定义构建应用程序,使用每个可重用模块的不同版本。
  • 我在构建系统中使用g ++ / makefiles
  • 我需要让它可以移植到Cygwin和Linux。

    1. 假设每个模块/客户都使用自己的Makefile构建,我如何配置我的makefile以动态指向正确的依赖版本?

    2. 我应该如何设置我的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 

我只是想让开发团队保持简单。

编辑: 重要的是要注意我还没有任何工作。我觉得我正在努力做正确的事情,但是我在努力做到正确的时候正在挣扎。

1 个答案:

答案 0 :(得分:1)

关于CM部分,如果您正在使用GIT,则可以为顶级目录和基本构建系统提供一个主存储库,并为每个子项目提供submodules

对于构建,我建议您使每个子项目独立,然后按依赖顺序列出顶级容器项目中的子项目列表。每个子项目都安装到一个特定的目录中,顶层容器项目将标志传递给每个项目,告诉他们这个安装目录的位置,以便他们可以找到头文件和库。使此(临时)安装目录镜像到实际安装目录,因此在需要时可以轻松复制到实际安装目录。

如果不是所有文件都应该从临时安装目录复制到实际安装目录,请让每个子项目生成一个文件,告诉我们应该复制哪些文件。

对于与平台无关的构建系统,我建议CMake。它可以处理配置和生成makefile,用于构建,比您可能需要的更多平台和编译器。

我希望这对你有意义。