我正在使用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
的一部分发生。
答案 0 :(得分:4)
在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-local
或distclean-local
中的部分或全部。
请注意
$<
来引用模型配置文件。这有助于支持资源外的构建。