使用自动制作将文件复制为默认目标的一部分

And*_*nke 2 automake autotools

我正在使用GNU Autotools构建的项目。作为在用户运行时默认完成的构建的一部分./configure && make,我希望它将文件复制config/foo.conf.origconfig/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
Run Code Online (Sandbox Code Playgroud)

但这没有效果。

./configure && make localconf工程。但是我不希望用户知道他们需要调用一个特殊的目标。我希望它作为默认值的一部分发生./configure && make

Joh*_*ger 5

命名程序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 $< $@
Run Code Online (Sandbox Code Playgroud)

清单中.orig的文件当中EXTRA_SOURCES,确保它被列入你的时候make dist,我你需要明确在命名内置文件CLEANFILES,如果你想让它受以下因素影响make clean

如果出于某种原因不能满足您的需求,则Automake可以提供一些相当一般的规定来附加您自己的构建规则。使用这些文件,您可以使文件的构建方式如下:

EXTRA_SOURCES = config/foo.conf.orig

all-local: config/foo.conf

config/foo.conf: config/foo.conf.orig
    cp -p $< $@
Run Code Online (Sandbox Code Playgroud)

您可能还需要使用一些或全部install-data-localuninstall-local以及无论是clean-localdistclean-local


顺便说一句,注意

  • 定义内置配置文件的依赖项,以确保在模型文件更改时重新复制该文件。
  • 使用$<在构建规则请参见各产品的配置文件。这有助于支持源外版本。