autotools - 如何使用autoconf创建安装目录变量?

标签 autotools configure

我正在尝试在 config.h 中为应用程序的安装目录创建全局定义。根据the Autoconf manual前缀变量可以用于此目的。在configure.ac中,我创建了一个全局定义:

AC_DEFINE_UNQUOTED([PROGRAM_DIRECTORY], [${prefix}], [])

但是 config.h 是用以下内容创建的:

#define PROGRAM_DIRECTORY NONE

即使我运行配置,我也会得到相同的结果:

./configure --prefix=/usr/local

我还尝试了其他变量,例如bindir。

是否有一个我可以使用的变量可以为我提供信息?还是我以错误的方式处理这个问题?

最佳答案

I am trying to create a global define in config.h for the installation directory of the application.

这有一些潜在的问题,但是好的。

According to the Autoconf manual, the prefix variable can be used for this purpose.

嗯,前缀旨在指定目录树的根,构建的工件安装在各个子目录中。典型的选择是 /usr 之间。和/usr/local ,尽管在某些情况下您可能确实使用其他内容,例如 /opt/my_prog 。如果这与您想要做的一致,那么您应该使用标准 --prefix每个 Autoconf configure 提供的选项脚本向其传达所需的前缀:

./configure --prefix=/usr/local

当然,/usr/local是该变量的默认值。如果这确实是您想要的,那么您不需要做任何特殊的事情来将其作为您的前缀。

但是,我建议您不要在 config.h 中创建基于前缀的定义。 。自动工具会遇到一些麻烦,以确保您在 configure 时指定的任何前缀。可以在make处被覆盖通过指定 prefix 来指定时间至make :

make prefix=/something/else

如果执行了该操作,则实际安装目录将与 config.h 中给出的目录不同。 。因此,我建议通过 -D 指定适当的定义。适当的选项 foo_CPPFLAGS Automake 变量,或者如果您使用 Autoconf 则通过等效方式没有Automake 。例如:

foo_CPPFLAGS = $(AM_CPPFLAGS) -DPROGRAM_DIRECTORY='$(prefix)'

这与使用 config.h 并不冲突用于其他目的。 (请注意,引号将由 shell 处理;它们对于 make 并不重要,并且它们不会出现在定义符号的实际值中。)


话虽如此,我无法立即解释您所描述的行为。我最好的猜测是你的 AC_DEFINE_UNQUOTED()很早就出现在您的 configure.ac 中它在命令行处理之前生效。这样的话,下移或许就足以达到预期的效果了。

关于autotools - 如何使用autoconf创建安装目录变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48693343/

相关文章:

compilation - 为什么我会收到此 aclocal 错误?

c++ - 如何告诉 AC_SUBST 不要替换参数中的变量?

autotools - AC_CHECK_FUNCS 的结果不一致

java - Hadoop : set a variable like hashSet only once so that it can be utilized multiple times in each map task

linux - 在远程Linux服务器上运行本地GCC

linux - 如何生成配置脚本--linux

c++ - 测试和自定义构建目录的组合

autotools - 使用 "make check"为使用程序二进制文件的测试启动 bash 脚本

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

iis-7 - 为 AngularJS HTML5Mode 配置 IIS URL 重写模块仍然无法正常工作