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

How to create an installation directory variable with autoconf?

我正在尝试在 config.h 中为应用程序的安装目录创建一个全局定义。根据 the Autoconf manualprefix 变量可用于此目的。在 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.

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

./configure --prefix=/usr/local

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

但是,我建议您不要config.h 中创建基于前缀的定义。通过将 prefix 指定为 make:

,Autotools 遇到了一些麻烦,以确保可以在 make 时覆盖您在 configure 时指定的任何前缀
make prefix=/something/else

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

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

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


话虽如此,我无法立即解释您描述的行为。我最好的猜测是你的 AC_DEFINE_UNQUOTED() 出现在你的 configure.ac 中足够早,它在命令行处理之前生效。在这种情况下,将其向下移动可能足以使其达到预期效果。