0

我使用 debuild 创建 debian 包。

In file "debian/control" is described two packages:
Package: app1
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Tool1.

Package: app2
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Tool2.

它们都应该包含由一个 makefile 编译但具有不同环境变量的相同二进制文件。

我的规则文件调用了两个编译:

%:
    TARGET=S_SS dh $@ -papp1
    TARGET=S_TT dh $@ -papp2

接下来是 debuild 阶段的结果流程:

dh clean -papp1
dh clean -papp2
dh build -papp1
dh build -papp2
dh binary -papp1
dh binary -papp2

看起来数据包是并行创建的。最后二进制文件被第二次构建覆盖。

是否可以以首先创建 app1 而不是 app2 的方式创建规则文件:

dh clean -papp1
dh build -papp1
dh binary -papp1
dh clean -papp2
dh build -papp2
dh binary -papp2
4

1 回答 1

1

回答您的问题:,不可能更改构建包的基本顺序。

dh-sequencer 将分阶段运行构建过程,例如(非常简化

  • 干净的
  • 建造
  • 包裹

在您当前的设置中,“构建”阶段将运行两个构建(针对您的两种风格),一旦两个构建完成,它将进入下一个阶段,将所有工件打包到 deb 中。

现在,不幸的是,您的第二个构建只会覆盖您的第一个构建(或者它会检测到它已经有二进制文件(不考虑更改的环境变量)并且根本不重新构建)。这主要是上游源的构建系统(即:您的构建系统)的问题,而不是 Debian 软件包工具集的问题。

为了正确构建您的包的多种风格,您的构建系统应该(真正)支持树外构建,您可以在 subdir1/ 中为一种风格构建所有二进制文件,在 subdir2/ 中构建另一种风格的所有二进制文件,所以这两个构建不会干扰。

然后您需要(手动!)指示dh使用适当的标志调用您的构建系统以使用这些子目录(显然还有不同的配置)。

一个真实的 Debian 软件包示例(免责声明:由我自己维护),它使用相同的源构建多种风格,dh可以在这里找到。

上游构建系统使用autotools(它本机支持树外构建),并且风格通过不同的配置标志来区分。

要点是这样的:

#!/usr/bin/make -f
builddir=debian/build/flavor-
FLAVOURS = foo bar
CONFIG_foo = --some-flag
CONFIG_bar = --some-other-flag

%:
        dh $@

# this target depends on 'configure_foo' and 'configure_bar'
override_dh_auto_configure: $(patsubst %,configure_%,$(FLAVORS))
# 'configure_%' is expanded to 'configure_foo' and 'configure_bar'
# the '$*' is replaced with the '%' component of the target ('foo', 'bar')
# so there are different builddirs ('debian/build/flavor-foo', 'debian/build/flavor-bar')
# and we call `configure`-script (relative to the builddir) with the appropriate flag
configure_%:
        mkdir -p $(builddir)$*
        cd $(builddir)$* && ../../../configure $(CONFIG_$*)

# same for the build-stage; this is simpler as we only need to run 'make' in the
# various builddirs
override_dh_auto_build: $(patsubst %,build_%,$(FLAVORS))
build_%:
    dh_auto_build --sourcedirectory=$(builddir)$*
于 2021-05-28T08:44:41.780 回答