3

在我使用 autoconf 和 automake 的项目中,我有两个可执行文件,比如“foo”和“bar”。假设“foo.c”看起来像

int main()
{
    exec ("bar");
    return 0;
}

即,“foo”使用“bar”。一旦我这样做,它就可以正常工作./configure && make && make install。但是,autoconf 提供了转换程序名称的选项。例如,我可以做./configure --program-suffix=-2.0. 然后“foo”和“bar”将被安装为

/usr/bin/foo-2.0
/usr/bin/bar-2.0

在这种情况下,“foo”中对“bar”的引用是不正确的,因为bar系统中将没有(应该是bar-2.0)。有什么办法可以让 autoconf/automake 自动调整这个参考?

4

1 回答 1

5

在您的文件中,Makefile您可以运行$(program_transform_name)sed 脚本来创建带有最终名称的头文件。

例如,假设您的程序名称是fooand bar,请创建一个包含以下内容的names.h.in文件:

#define FOO_NAME "@foo-name@"
#define BAR_NAME "@bar-name@"

然后装备你Makefile.am有规则names.hnames.h.in

BUILT_SOURCES = names.h
EXTRA_DIST = names.h.in

edit = sed \
  -e 's/@foo-name@/'`echo foo | sed '$(program_transform_name)'`'/g;' \
  -e 's/@bar-name@/'`echo bar | sed '$(program_transform_name)'`'/g;'

names.h: $(srcdir)/names.h.in Makefile
        $(edit) < $(srcdir)/names.h.in > $@

最后在你的源代码中包含names.h并使用FOO_NAME和。BAR_NAME

于 2012-10-02T09:10:22.520 回答