我在软件 A 上进行开发,该软件依赖于软件 B 和 C,软件 B 依赖于 D,D 也附带了 C 的便捷副本。对于我在 A 和 B 上的工作,我希望与 GitHub 进行持续集成。Travis CI 可以轻松提供这一点。
我对 Travis CI 的问题是它在 Ubuntu Trusty 上运行。我的工作站运行 Fedora,我部署到的超级计算机运行 CentOS 7。C/C++ 代码在所有平台上编译,这种多样性意味着更多的工作。
在 Travis CI 上构建单个库不是问题,我可以做到这一点。目前,我在构建 A 时构建所有这些依赖项,这浪费了资源和时间。“正确”的解决方案是在某个发布版本中拥有依赖库的 Ubuntu Trusty 包。'
在构建这些软件包时,我发现 Debian 软件包比 RPM 软件包麻烦得多。在 RPM 软件包中,我只需执行以下操作:
%build
aclocal
autoreconf -f
./configure \
--disable-testing \
--enable-clover \
--enable-mm-malloc \
--enable-openmp \
--enable-parallel-arch=scalar \
--enable-proc=AVX \
--enable-soalen=4 \
--libdir=%{_libdir} \
--prefix=/usr/ \
CXX=/usr/bin/g++ CC=/usr/bin/gcc \
CXXFLAGS="-O2 -finline-limit=50000 -Wall -Wpedantic -fmax-errors=1 -fopenmp --std=c++11 -Drestrict=__restrict__" \
|| cat config.log
make %{?_smp_mflags}
%install
%make_install
然后它将执行所有这些步骤。使用 Debian,这可能只需在文件build:
中覆盖即可debian/rules
。但是,它仍会尝试运行dh_auto_clean
,然后会找到树内构建工件(显然……)。但是,make clean
在调用之前我无法运行autoreconf
。
这意味着我无法运行debuild -S
,这意味着我无法在 Launchpad PPA 上构建它,这意味着我无法在 Travis CI 上安装该包。
从我的 GNU Autotools 项目(通常是嵌套的子项目)中获取简单、随意的 Ubuntu 包的合理方法是什么?