我正在尝试在 Debian 上编辑 Apache 模块(严格来说,我是在 Raspbian Jessie-Lite 上执行此操作),并且大致遵循Debian 构建说明:
$ mkdir -p ~/src/debian; cd ~/src/debian
$ apt-get source apache2-bin
$ cd apache2-2.4.10
$ debuild -b -uc -us
在旧的原始 Pi 上,构建过程大约需要一个半小时。这很好。一次!但我相信构建过程正在执行 a make clean
,因此在对单个 mod_*.c 文件进行小幅编辑后,它想要重建整个文件,这有点减慢了我的开发速度!
我尝试添加-dc
到debuild
命令中,但它没有构建任何东西。我什至尝试删除目标 mod_*.so 文件以“鼓励”它重建它,但仍然没有!
更新 2016-08-21:将 -nc 添加到 debuild 命令不会导致模块重新编译。这是该命令的输出:
$ debuild -b -uc -us -nc
dpkg-buildpackage -rfakeroot -D -us -uc -b -nc
dpkg-buildpackage: source package apache2
dpkg-buildpackage: source version 2.4.10-10+deb8u5
dpkg-buildpackage: source distribution jessie-security
dpkg-buildpackage: source changed by Salvatore Bonaccorso <[email protected]>
dpkg-source --before-build apache2-2.4.10
dpkg-buildpackage: host architecture armhf
debian/rules build
dh build --parallel --with autotools_dev
fakeroot debian/rules binary
dh binary --parallel --with autotools_dev
dpkg-genchanges -b >../apache2_2.4.10-10+deb8u5_armhf.changes
dpkg-genchanges: binary-only upload (no source code included)
dpkg-source --after-build apache2-2.4.10
dpkg-buildpackage: binary-only upload (no source included)
Now running lintian...
N: 16 tags overridden (1 error, 4 warnings, 11 info)
Finished running lintian.
答案1
将选项添加-nc
到debuild
命令行中。但这可能会暴露构建系统或包装中的问题,因此请做好准备。但对于小的修复,它通常工作得很好。
然而,由于apache2
源包使用 debhelper(像许多其他包一样),仅此还不够,因为 debhelper 还在每个二进制包的单独日志文件中保留自己的已完成步骤日志。这些可以通过 完全删除dh_clean
。但要让 debhelper 只重做必要的工作,请仅截断相关的工作
sed -i '/^dh_auto_build$/Q' debian/apache2-bin.debhelper.log
跑步前debuild -nc
。
答案2
debian 目录中有一个规则文件。它本质上是一个 make 文件。如果删除所有有关清洁的指令,然后添加
override_dh_clean:
并且不放入任何东西(根本)不会发生清洁。请小心,尽管这可能会导致构建问题,虽然可能性不大,但有可能。另一种选择是不更改任何内容并使用 -j 选项进行并行构建。不确定树莓派的优势。
规则文件应该看起来像这。
答案3
我也有类似的问题; Scite debian 软件包包含debian/rules
:
...
BUILD_DATE="$(date --utc --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" "+%b %d %Y %T")"
override CPPFLAGS += -DBUILD_DATE="\"$(BUILD_DATE)\""
%:
dh $@
override_dh_auto_build:
dh_auto_build --sourcedirectory=scintilla/gtk -- GTK3=1 $(BUILD_LUA)
dh_auto_build --sourcedirectory=scite/gtk -- gnomeprefix=/usr GTK3=1 $(BUILD_LUA)
....
本质上,override_dh_auto_build
调用 make,它检测更改的源文件并仅重建更改的文件。但是,即使debian/rules
设置BUILD_DATE
,运行:
fakeroot debian/rules -j$(nproc) override_dh_auto_build
...将在某些使用 BUILD_DATE 作为定义的 cpp 源文件中失败。解决方案是在命令行调用中显式指定此变量:
fakeroot debian/rules -j$(nproc) CPPFLAGS+=-DBUILD_DATE="" override_dh_auto_build
...然后编译通过(额外的好处是不会创建新的 .deb,因此您不必等待)。从本质上讲,这有助于重新运行更改文件的重建过程,为您提供 .so/.exe,而不打包 .deb。