管理多个项目的元构建解决方案
A meta-build solution managing multiple projects
我正在寻找有关在几天的搜索中没有引起我注意的软件的建议。
是否有任何软件解决方案可以同时部署多个项目,在源构建包管理器级别运行(如 ports, portages, or nix),但可以驻留在本地?
至于细节,我们有几个具有以下特征的松散连接的软件项目:
- 项目主要是用 C/C ++ 和 Python 编写的,但更多的语言表示为次要混合(Haskell、Rust、Perl)
- 项目在 git superprojects 中组合在一起,某些 build/deployment 预设针对特定环境进行了仔细调整(并通过类似布尔选项的子集针对特定目的进行了调整)
- 我们已经为支持选项、构建配置、导出目标等的 C++ 项目完成了精心设计的 CMake 构建脚本。现在切换它会很昂贵。
- 我们被迫处理各种 Linux 发行版(从 Gentoo 和 Ubuntu 到 Debian 和 CentOS)。
我们需要一个适用于各种环境的统一构建和部署工具。 CMake 不能很好地与非编译语言集成(例如,本身不支持通过 virtualenv 进行的本地 Python 安装)。
我不想改变我们已经开发的东西,而是想以 OS 包管理器的方式使用它们。按照我的设想,应该是和所谓的meta-build tool很相似的东西。事实上,Gentoo Portages 非常接近:
- 使用简单的布尔选项(useflags、配置文件)轻松定制
- 将构建过程委托给专门为此目的而设计和经过良好测试的可靠且可自定义的工具(CMake、autotools、Bazel 等)
- 提供更改目标编译器安装并使用标准化指令集以清晰的声明方式指定构建过程的能力。
但是,Portages 不能在本地 运行(并且还有其他不相关的缺陷)。
在将整个构建系统切换到 Meson or Bazel 或我目前能找到的任何其他系统之前,我必须变得非常自信。
更新
更具体地说,我可以参考我们目前所做的事情。我们正在维护的超级项目中的 one 涉及特定的科学实验:
- 所有子项目都是listed作为git个子模块
- 维护整个构建-安装-部署生命周期的简单BASH-script
- 引用具体环境的特定设置的预设表示为 BASH sources 并包含在此维护 shell 脚本中。
由于几天来都没有结果,我想根据我们已经从这些 shell 脚本 activity.[=18= 中获得的经验编写自己的解决方案]
我正在寻找有关在几天的搜索中没有引起我注意的软件的建议。
是否有任何软件解决方案可以同时部署多个项目,在源构建包管理器级别运行(如 ports, portages, or nix),但可以驻留在本地?
至于细节,我们有几个具有以下特征的松散连接的软件项目:
- 项目主要是用 C/C ++ 和 Python 编写的,但更多的语言表示为次要混合(Haskell、Rust、Perl)
- 项目在 git superprojects 中组合在一起,某些 build/deployment 预设针对特定环境进行了仔细调整(并通过类似布尔选项的子集针对特定目的进行了调整)
- 我们已经为支持选项、构建配置、导出目标等的 C++ 项目完成了精心设计的 CMake 构建脚本。现在切换它会很昂贵。
- 我们被迫处理各种 Linux 发行版(从 Gentoo 和 Ubuntu 到 Debian 和 CentOS)。
我们需要一个适用于各种环境的统一构建和部署工具。 CMake 不能很好地与非编译语言集成(例如,本身不支持通过 virtualenv 进行的本地 Python 安装)。
我不想改变我们已经开发的东西,而是想以 OS 包管理器的方式使用它们。按照我的设想,应该是和所谓的meta-build tool很相似的东西。事实上,Gentoo Portages 非常接近:
- 使用简单的布尔选项(useflags、配置文件)轻松定制
- 将构建过程委托给专门为此目的而设计和经过良好测试的可靠且可自定义的工具(CMake、autotools、Bazel 等)
- 提供更改目标编译器安装并使用标准化指令集以清晰的声明方式指定构建过程的能力。 但是,Portages 不能在本地 运行(并且还有其他不相关的缺陷)。
在将整个构建系统切换到 Meson or Bazel 或我目前能找到的任何其他系统之前,我必须变得非常自信。
更新
更具体地说,我可以参考我们目前所做的事情。我们正在维护的超级项目中的 one 涉及特定的科学实验:
- 所有子项目都是listed作为git个子模块
- 维护整个构建-安装-部署生命周期的简单BASH-script
- 引用具体环境的特定设置的预设表示为 BASH sources 并包含在此维护 shell 脚本中。
由于几天来都没有结果,我想根据我们已经从这些 shell 脚本 activity.[=18= 中获得的经验编写自己的解决方案]