如何使用 autoconf 创建安装目录变量?
How to create an installation directory variable with autoconf?
我正在尝试在 config.h 中为应用程序的安装目录创建一个全局定义。根据 the Autoconf manual,prefix 变量可用于此目的。在 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
中足够早,它在命令行处理之前生效。在这种情况下,将其向下移动可能足以使其达到预期效果。
我正在尝试在 config.h 中为应用程序的安装目录创建一个全局定义。根据 the Autoconf manual,prefix 变量可用于此目的。在 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
:
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
中足够早,它在命令行处理之前生效。在这种情况下,将其向下移动可能足以使其达到预期效果。