我检查了源根目录中configure.ac
中的头文件
AC_CHECK_HEADER(log4c.h,
[],
[AC_MSG_ERROR([Couldn't find or include log4c.h])])
我想在不同的平台上给出不同的反馈,以反映提供标题的不同最直接的方式:
在Debian上,它应该会错误地显示消息
Couldn't find or include log4c.h. Install log4c using 'sudo apt-get install liblog4c-dev'
在opensuse上,它应该会出现
... Install log4c using 'sudo yum install log4c-devel'
错误(没有研究包名,但是你明白我的意思)在其他系统上(我懒得研究包名),应该会出现
... Install log4c by fetching ftp://.../log4c.tar.gz and installing with './configure && make && make install' in the source root
我
检查了
AM_CONDITIONAL
宏,但我不知道如何在configure.ac
中而不是在Makefile.am
中使用它(如autoconf/automake: conditional compilation based on presence of library?中所述)在stackoverflow.com/questions/4627900/m4-executing-a-shell-command中找到了运行
esyscmd
的提示,但是在运行esyscmd (/bin/echo abc)
时将configure.ac
添加到autoreconf --install --verbose --force
不会打印任何内容。这两个答案描述了条件宏的使用,没有提到的操作系统的shell命令和链接到预定义的宏(如
AC_CHECK_HEADER_DEBIAN
,AC_CHECK_HEADER_SUSE
,等等)是赞赏的。以下
configure.ac
不起作用:AC_INIT([cndrvcups-common], [2.90], [[email protected]])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([foreign -Wall subdir-objects])
AC_PROG_CC
AM_PROG_AR
AM_PROG_CC_C_O
AC_MSG_NOTICE([Hello, world.])
AC_INCLUDES_DEFAULT
AC_CHECK_HEADER(check.h,
[],
[
AS_IF (test "$(lsb_release -cs)" = "vivid", [echo aaaaaa], [echo bbbbbb])
])
LT_INIT # needs to be after AM_PROGS_AR
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
因为
./configure
失败checking check.h usability... no
checking check.h presence... no
checking for check.h... no
./configure: line 4433: syntax error near unexpected token `;'
./configure: line 4433: ` if ; then :'
无论是否指定了
./configure: line 4427: #include: command not found
,都会发生AC_CHECK_HEADER
。 最佳答案
你的configure.ac
差不多可以了。唯一的问题是AS_IF
和括号之间的空格。在m4
脚本中,宏名和左括号之间不允许有空格。这是正确的语法:
AC_CHECK_HEADER(check.h,
[],
[
AS_IF(test "$(lsb_release -cs)" = "vivid", [echo aaaaaa], [echo bbbbbb])
])
如果您正在寻找检测不同发行版的方法,请查看configure.ac的
cgmanager
。更新
我注意到你的
configure.ac
中还有一个问题。AC_INCLUDES_DEFAULT宏扩展为一组默认的includes,不能在这里使用。也不需要。默认情况下,它将在AC_CHECK_HEADER宏中使用,因为您省略了最后一个参数。
这就是您提到的
line 4427: #include: command not found
错误的原因。更新您的评论
首先,运行系统命令本身,比如
lsb_release
是不可移植的。您应该首先检查是否存在,例如使用AC_CHECK_PROG
。关于语法,我将首先使用反勾号获得命令的输出:
result=`lsb_release -cs`
,然后测试结果输出:test "x$result" = "xvivid"
。需要x
以避免某些shell中出现空值问题。最后,我怀疑configure脚本是否适合所有这些特定于发行版的消息。你可以考虑把它放到自述文件中。
关于linux - 如果AC_CHECK_HEADER在autoconf/configure.ac中失败,如何为不同的平台指定不同的反馈?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30080236/