在configure.in或configure.ac中,一般在宏内不能直接使用变量,只能用常量,但是如果想使用变量,我们知道可以使用m4_esyscmd或esyscmd宏来避免类似如
warning: AC_INIT: not a literal: $VERSION的警告,这个警告可能会对后续的操作产生一定错误,比如以宏AC_INIT为例:
VERSION=`echo $(cat ./version.txt)`就会产生一个警告,但是写成如下宏的定义格式,就不会产生警告:
AC_INIT(my-fine-package, [$version])
AC_INIT(my-fine-package, m4_esyscmd([echo $(cat ./version.txt)]))但是这样有一个问题,我们在产生的configure文件内容中,会出现变量如下形式:
VERSION='1.0.0这样在执行./configure的时候,产生shell的语法错误,怎么解决这个问题呢?去掉换行即可,在产生shell的过程当中,我们可以避免换行:
'
1,echo命令是会自动产生一个换行的,带上-n选项,那么就可以去掉换行,如下所示:
AC_INIT(my-fine-package, m4_esyscmd([echo -n $(cat ./version.txt)]))2,使用tr命令去掉换行:
AC_INIT(my-fine-package, m4_esyscmd([tr -d "\n" < VERSION)]))方法是多样的,就需要看你的shell功底了,:)。