在我使用 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 自动调整这个引用?
最佳答案
在您的 Makefile
中,您可以运行 $(program_transform_name)
sed 脚本来创建具有最终名称的头文件。
例如,假设您的程序名称是 foo
和 bar
,创建一个包含以下内容的 names.h.in
文件:
#define FOO_NAME "@foo-name@"
#define BAR_NAME "@bar-name@"
然后让您的 Makefile.am
拥有从 names.h.in
生成 names.h
的规则:
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
。
关于makefile - 在程序中使用来自 autoconf 的 "program_name_transform",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12683660/