基于bin_PROGRAMS及其SOURCES自动生成目标

时间:2017-01-19 12:18:40

标签: autotools automake

我有以下与automake相关的问题,我很乐意提供任何建议/提示。

让我们有一个Makefile.am来创建n个程序(例如前2个):

bin_PROGRAMS=p1 p2
p1_SOURCES=a1.c a2.c
p2_SOURCES=b1.c b2.c

我需要找到一些可以包含在任何Makefile.am中的“魔法”,为所有bin_PROGRAMS生成类似的内容:

p1.1: a1.c a2.c
         ./some-script a1.c a2.c > p1.1

p2.1: b1.c b2.c
         ./some-script b1.c b2.c > p2.1

有可能吗?理想情况下以某种POSIX方式...... 谢谢你的任何想法。

1 个答案:

答案 0 :(得分:0)

不幸的是,我不认为这在严格的可移植makefile中是可行的,因为你需要一个模式规则。

模式规则如下所示:

%.1: $(FIXME_something_goes_here)
        $(AM_V_GEN)$(srcdir)/some-script $^ > $@

(不要忘记$(srcdir),以确保你的makefile在进行vpath构建时有效......)

困难的部分是$(FIXME_something_goes_here)的内容。由于$(p1_SOURCES)之类的Automake指令只是普通的Makefile变量,因此您应该可以使用以下内容自动确定它:

$($(basename $(@F))_SOURCES)

虽然如果你的程序名中有-这样的非法标识字符,那么你需要将它们全部转换为_,这将涉及更复杂的表达。