我正在尝试在config.h中为应用程序的安装目录创建一个全局定义。根据{{3}},前缀变量可用于此目的。在configure.ac中,我创建了一个全局定义:
AC_DEFINE_UNQUOTED([PROGRAM_DIRECTORY], [${prefix}], [])
但是config.h是使用:
创建的#define PROGRAM_DIRECTORY NONE
即使我运行configure with:
,我也会得到相同的结果./configure --prefix=/usr/local
我也尝试过其他变量,比如bindir。
我可以使用的变量会给我信息吗?或者我是以错误的方式解决这个问题?
答案 0 :(得分:1)
我正在尝试在config.h中为应用程序的安装目录创建一个全局定义。
这有一些潜在的问题,但是好的。
根据Autoconf手册,前缀变量可用于此目的。
好吧,前缀用于指定目录 tree 的根目录,并在各个子目录中安装构建的工件。典型的选择是在/usr
和/usr/local
之间,但在某些情况下,您可能确实使用其他内容,例如/opt/my_prog
。如果这与您想要执行的操作一致,那么您应该使用每个Autoconf --prefix
脚本提供的标准configure
选项来向其传达所需的前缀:
./configure --prefix=/usr/local
当然,/usr/local
是此变量的默认值。如果那真的是你想要的那么你就不应该做任何特别的事情来把它作为你的前缀。
但是,我建议您不在config.h
中创建基于前缀的定义。 Autotools会遇到一些麻烦,以确保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
这与将make
用于其他目的并不冲突。 (请注意,引号将由shell处理;它们对AC_DEFINE_UNQUOTED()
并不重要,并且它们不会出现在已定义符号的实际值中。)
话虽如此,我无法立即解释您描述的行为。我最好的猜测是,您的configure.ac
在 imports: [
BrowserModule,
HttpClientModule,
]
出现得足够早,它会在命令行处理之前生效。在这种情况下,将其向下移动可能足以使其具有预期的效果。