gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:44:49 25 4
gpt4 key购买 nike

在我使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com