【问题标题】:AC_CHECK_HEADER fail if the header install path has api in it如果标头安装路径中有 api,则 AC_CHECK_HEADER 失败
【发布时间】:2016-12-09 18:33:17
【问题描述】:

其中一个头文件,例如 bamtools 包中的 BamReader.h 安装在

/usr/local/include/bamtools/api

我尝试将包含标志设置为:

CXXFLAGS="$CXXFLAGS -I/usr/local/include/bamtools"
or
CXXFLAGS="$CXXFLAGS -I/usr/local/include/bamtools/api"
AC_CHECK_HEADERS([BamReader.h], [bamtools_found=yes], [AC_MSG_ERROR([Unable to find bambools header])])

如果我检查 config.log 文件,第一个给了我一个错误:

configure:3837: g++ -c -g -O2 -I/usr/local/include/bamtools  conftest.cpp >&5
conftest.cpp:54:23: fatal error: BamReader.h: No such file or directory
compilation terminated.

第二个给了我以下错误:

configure:3837: g++ -c -g -O2 -I/usr/local/include/bamtools/api  conftest.cpp >&5
In file included from conftest.cpp:54:0:
/usr/local/include/bamtools/api/BamReader.h:13:28: fatal error: api/api_global.h: No such file or directory
 #include "api/api_global.h"^M
                            ^
compilation terminated.
configure:3837: $? = 1

问题在于 BamReader.h 试图包含 api/api_global.h

【问题讨论】:

    标签: c++ autotools autoconf


    【解决方案1】:

    通过将 api 放入 AC_CHECK_HEADERS 中,我得到了一个简单的修复。

    CXXFLAGS="$CXXFLAGS -I/usr/local/include/bamtools"
    AC_CHECK_HEADERS([api/BamReader.h], [bamtools_found=yes], [AC_MSG_ERROR([Unable to find bambools header])])
    
    configure output
    checking api/BamReader.h usability... yes
    

    本质上,您必须通过将 api/ 附加到每个标头来使用该库。请评论:这是一个好习惯吗?

    【讨论】:

    • 通常,库要求只包含其基本路径而不是子目录,以避免与标准头文件或来自其他库的头文件发生命名冲突。
    • 在库标题的目录名称中使用单词“api”是不好的做法。理想情况下,标题应称为<bamtools/BamReader.h>
    • 同意罗兰的意见。 api就是这么笼统的名词,没啥用。
    猜你喜欢
    • 2020-11-29
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多