debuild - 是否可以通过编译一个 Makefile 的 debuild 来构建多个 debian 软件包
debuild - Is it possible to build several debian packages by debuild that compile one Makefile
我使用 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
回答您的问题:否,无法更改构建包的基本顺序。
dh-sequencer 将运行分阶段构建过程,例如(非常简化)
- 清洁
- 建设
- 包
在您当前的设置中,“构建”阶段将 运行 两个构建(针对您的两种风格),一旦两个构建都完成,它将进入下一阶段,打包所有工件进入负债。
现在,不幸的是,您的第二个构建只会覆盖您的第一个构建(或者它会检测到它已经有二进制文件(不考虑更改的环境变量)并且根本不会重新构建)。
这主要是上游源构建系统的问题(即:您的构建系统),而不是 Debian 软件包工具集。
为了正确构建包的多种风格,构建系统应该(真的)支持树外构建,您可以在 subdir1/ 中为一种风格构建所有二进制文件,并为subdir2/ 中的另一种风格,因此两个构建不会干扰。
然后您需要(手动!)指示 dh
使用正确的标志调用您的构建系统以使用这些子目录(显然还有不同的配置)。
可以在 here.
中找到使用 dh
从相同来源构建多种风格的 Debian 软件包的真实示例(免责声明:由我自己维护)
上游构建系统使用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)$*
我使用 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
回答您的问题:否,无法更改构建包的基本顺序。
dh-sequencer 将运行分阶段构建过程,例如(非常简化)
- 清洁
- 建设
- 包
在您当前的设置中,“构建”阶段将 运行 两个构建(针对您的两种风格),一旦两个构建都完成,它将进入下一阶段,打包所有工件进入负债。
现在,不幸的是,您的第二个构建只会覆盖您的第一个构建(或者它会检测到它已经有二进制文件(不考虑更改的环境变量)并且根本不会重新构建)。 这主要是上游源构建系统的问题(即:您的构建系统),而不是 Debian 软件包工具集。
为了正确构建包的多种风格,构建系统应该(真的)支持树外构建,您可以在 subdir1/ 中为一种风格构建所有二进制文件,并为subdir2/ 中的另一种风格,因此两个构建不会干扰。
然后您需要(手动!)指示 dh
使用正确的标志调用您的构建系统以使用这些子目录(显然还有不同的配置)。
可以在 here.
中找到使用dh
从相同来源构建多种风格的 Debian 软件包的真实示例(免责声明:由我自己维护)
上游构建系统使用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)$*