使用 automake 将文件复制为默认目标的一部分
Using automake to copy a file as part of the default target
我正在处理一个使用 GNU Autotools 构建的项目。作为用户运行 ./configure && make
时默认完成的构建的一部分,我希望它将文件 config/foo.conf.orig
复制到 config/foo.conf
,生成用户可以编辑的示例配置。
我要在 Makefile.am
文件中放入什么才能实现此目的?
我试过:
EXTRA_PROGRAMS = localconf
localconf_SOURCES = conf/foo.conf.orig
.PHONY: localconf
localconf:
echo Creating local configuration...
cp conf/foo.conf/orig conf/foo.conf
但这没有任何效果。
做 ./configure && make localconf
工作。但我不希望用户必须知道他们需要调用一个特殊的目标;我希望它作为默认 ./configure && make
.
的一部分发生
在 EXTRA_PROGRAMS
中命名一个程序不会导致它被包含在构建中。该变量可以看作是 可能 包含在构建中但未在任何其他 *_PROGRAMS
变量中明确命名的程序的声明。实际上导致它们被构建通常涉及 configure
替换。这有助于满足 Automake 对所有目标的静态知识的需求。
如果要构建的文件是将与软件一起安装的文件(可能在用户修改后),那么要做的就是将其命名为普通目标,并为其提供构建规则。也许是这样的:
sysconf_DATA = config/foo.conf
EXTRA_SOURCES = config/foo.conf.orig
CLEANFILES = config/foo.conf
config/foo.conf: config/foo.conf.orig
cp -p $< $@
在 EXTRA_SOURCES
中列出 .orig
文件可确保在您 make dist
时包含它,我 认为 您需要明确如果您希望它受到 make clean
.
的影响,请将构建文件命名为 CLEANFILES
如果由于某种原因不能满足您的需求,那么Automake有一些还算general provisions for attaching your own build rules。使用这些,你可以这样构建你的文件:
EXTRA_SOURCES = config/foo.conf.orig
all-local: config/foo.conf
config/foo.conf: config/foo.conf.orig
cp -p $< $@
您可能还想使用 install-data-local
、uninstall-local
以及 clean-local
或 distclean-local
.
的部分或全部
顺便说一句,注意
- 为构建的配置文件定义依赖关系,确保在模型文件更改时重新复制该文件。
- 在构建规则中使用
$<
来引用模型配置文件。这有助于支持外源构建。
我正在处理一个使用 GNU Autotools 构建的项目。作为用户运行 ./configure && make
时默认完成的构建的一部分,我希望它将文件 config/foo.conf.orig
复制到 config/foo.conf
,生成用户可以编辑的示例配置。
我要在 Makefile.am
文件中放入什么才能实现此目的?
我试过:
EXTRA_PROGRAMS = localconf
localconf_SOURCES = conf/foo.conf.orig
.PHONY: localconf
localconf:
echo Creating local configuration...
cp conf/foo.conf/orig conf/foo.conf
但这没有任何效果。
做 ./configure && make localconf
工作。但我不希望用户必须知道他们需要调用一个特殊的目标;我希望它作为默认 ./configure && make
.
在 EXTRA_PROGRAMS
中命名一个程序不会导致它被包含在构建中。该变量可以看作是 可能 包含在构建中但未在任何其他 *_PROGRAMS
变量中明确命名的程序的声明。实际上导致它们被构建通常涉及 configure
替换。这有助于满足 Automake 对所有目标的静态知识的需求。
如果要构建的文件是将与软件一起安装的文件(可能在用户修改后),那么要做的就是将其命名为普通目标,并为其提供构建规则。也许是这样的:
sysconf_DATA = config/foo.conf
EXTRA_SOURCES = config/foo.conf.orig
CLEANFILES = config/foo.conf
config/foo.conf: config/foo.conf.orig
cp -p $< $@
在 EXTRA_SOURCES
中列出 .orig
文件可确保在您 make dist
时包含它,我 认为 您需要明确如果您希望它受到 make clean
.
CLEANFILES
如果由于某种原因不能满足您的需求,那么Automake有一些还算general provisions for attaching your own build rules。使用这些,你可以这样构建你的文件:
EXTRA_SOURCES = config/foo.conf.orig
all-local: config/foo.conf
config/foo.conf: config/foo.conf.orig
cp -p $< $@
您可能还想使用 install-data-local
、uninstall-local
以及 clean-local
或 distclean-local
.
顺便说一句,注意
- 为构建的配置文件定义依赖关系,确保在模型文件更改时重新复制该文件。
- 在构建规则中使用
$<
来引用模型配置文件。这有助于支持外源构建。