Answers:
在这种情况下
VAR=value ./configure
行为取决于您当前的外壳,而在此
./configure VAR=value
行为取决于configure-script。一些开发人员更喜欢后者,因为他们想选择是否在脚本中设置变量,而不是让某个人从外面神奇地设置脚本的变量。
实际上,差异不大,因为
例如,bash配置脚本的--help
消息显示如下:
Some influential environment variables:
DEBUGGER_START_FILE
location of bash debugger initialization file
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
nonstandard directory <lib dir>
LIBS libraries to pass to the linker, e.g. -l<library>
CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir>
CPP C preprocessor
YACC The `Yet Another C Compiler' implementation to use. Defaults to
the first program found out of: `bison -y', `byacc', `yacc'.
YFLAGS The list of arguments that will be passed by default to $YACC.
This script will default YFLAGS to the empty string to avoid a
default value of `-d' given by some make applications.
在每种情况下,设置变量的任何一种方法都有效。
但是请记住开发人员的偏好,以防有人决定“改善”事物。
进一步阅读:
./configure
config.status
AC_ARG_VAL
:该
AC_ARG_VAR
宏用于将特定(环境)变量声明为脚本的参数,从而对其进行描述和特定用途。尽管此功能在autoconf的历史中是最近才添加的,但它确实很重要。反映了它的最新存在,该宏不需要AS_HELP_STRING
帮助程序,只需要两个参数:变量名和./configure --help期间打印的字符串:
AC_ARG_VAR(var-name, help-string)
并附有关于长期实践的评论:
默认情况下,configure像任何其他sh脚本一样从环境中拾取变量。其中大多数被忽略。那些没有的应该通过这个宏声明。这样,它们被标记为珍贵的变量。
标记为珍贵的变量将在Makefile.in中被替换,而不必调用显式的
AC_SUBST
,但这不是定义中最重要的部分。重要的是变量已缓存。
AC_ARG_VAR
,再次表达了开发人员的偏好。
启动configure时的变量值保存在高速缓存中,包括如果不是在命令行上而是通过环境指定的话。确实,尽管configure可以在“ ./configure CC = bizarre-cc”中注意到CC的定义,但不可能在“ CC = bizarre-cc ./configure”中注意到它,不幸的是,这是大多数用户所做的。
env VAR=value ./configure
涉及到VAR=value ./configure