autotools - 使用 automake 将文件复制为默认目标的一部分

标签 autotools automake

我正在开发一个使用 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 $< $@

列出.orig文件 EXTRA_SOURCES确保当您 make dist 时它被包含在内,我认为您需要在 CLEANFILES 中显式命名构建文件如果你希望它受到 make clean 的影响.

如果由于某种原因不能满足您的需求,那么 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-localdistclean-local .

<小时/>

顺便说一句,请注意

  • 定义构建的配置文件的依赖项,确保在模型文件发生更改时重新复制该文件。
  • 使用$<在构建规则中引用模型配置文件。这有助于支持外源构建。

关于autotools - 使用 automake 将文件复制为默认目标的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55410635/

相关文章:

makefile - 如何从 autotools 生成的 makefile 中删除 -Werror?

makefile - 为什么automake无法生成Makefile.in

c++ - Navit Autotools 无需优化即可构建

c - gengetopt 和 Automake

uninstallation - 如何获得 'make uninstall'删除空目录和文件?

automake - 使用 automake 安装配置文件和日志文件

autotools - 如何配置 autotools/gcc 以使用绝对路径打印警告和错误?

c - GNU Autotools - 如何处理必需但可能丢失的 header ?

linux - 使用 ptxdist 交叉编译 snort 导致 INADDR_NONE 配置错误

c++ - 如何使用 Autoconf 通过 "./configure"设置定义