makefile - 在程序中使用来自 autoconf 的 "program_name_transform"

标签 makefile autotools autoconf automake

在我使用 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 脚本来创建具有最终名称的头文件。

例如,假设您的程序名称是 foobar,创建一个包含以下内容的 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_NAMEBAR_NAME

关于makefile - 在程序中使用来自 autoconf 的 "program_name_transform",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12683660/

相关文章:

c - makefile 上的 fatal error ,需要了解问题所在

c++ - 如何使用自动工具处理子项目?

autotools - 更改configure.ac中的*FLAGS与使用子项目进行缓存

c - 在 autoconf 中探测符号可见性扩展的最佳实践

c++ - cmake 没有目标文件

c - 如何修复 Makefile 错误?

c++11 - AX_CXX_COMPILE_STDCXX_11 不起作用 : syntax error near unexpected token `,'

c - automake 的 subdir-objects 选项不起作用

自动工具临时文件

c - 你如何构造一个 C makefile 以便它编译 source.c 文件?