使用 autoconf 查找自定义包含目录

Posted

技术标签:

【中文标题】使用 autoconf 查找自定义包含目录【英文标题】:Finding custom includes directories with autoconf 【发布时间】:2011-06-16 21:55:44 【问题描述】:

我正在尝试编译一个使用节日库的程序。

基本上,要求是在包含路径中包含节日 estools 头目录,并且包含它们的库路径。

在正常安装中,它们只是留在自己的文件夹中,所以你有

/some/path/festival/src/include 
/some/other/path/estools/include

作为所需的搜索路径,并且

/some/path/festival/src/lib
/some/other/path/estools/lib

作为库路径。

我认为处理这个问题的正确方法是使用“--with-estools”和“--with-festival”配置选项。

但是,当它安装在 debian/ubuntu 系统上时,会有不同的设置。 我希望能够处理搜索路径所在的设置

/usr/include/festival
/usr/include/estools

而搜索路径就是

/usr/lib

我想检测第二种情况,并自动处理它,如果不满足第二种情况,仍然需要用户指定前两个目录。我该怎么做?

【问题讨论】:

【参考方案1】:

包维护者根本不需要担心这些细节;这是用户的责任。如果用户在非标准位置安装了库,则用户需要将 LDFLAGS=-L/path/to/lib 添加到 CONFIG_SITE 文件或每次调用 configure 或将该路径放入编译器的搜索路径中一些系统相关的机制。同样,用户应将 -I/path/to/include 附加到 CPPFLAGS。

换句话说,debian 所做的事情是正确的,只需将库和头文件安装在标准位置即可。任何选择将库安装在非标准位置的人都会给自己带来更多的工作。纠正他们的错误不是你的责任。

添加 --with-festival 或 --with-festival-headers 之类的选项没有帮助;用户可以很容易地分配给 LDFLAGS 和 CPPFLAGS,并且这些变量是标准化的。

【讨论】:

+1 表示没有使用错误的工具重新实现***。当--without-festival 具有某种含义时,像--with-festival 这样的选项是合法的。换句话说,--with/--without 选项旨在启用或禁用其他包的使用。搜索路径的实际配置发生在LDFLAGSCPPFLAGS【参考方案2】:

有什么东西会阻止这样的设置选项吗?

    --festival-includes 带有默认值(如果未设置)到 /usr/include/festival

    --festival-libs,默认值(如果未设置)为 /usr/lib/libfestival.XXX

estools 也是如此。

【讨论】:

这需要两倍于我想要的命令行选项。另外,我真的很想检测 SYSTEM_INCLUDE_DIRECTORY/festival/festival.h 中的任何文件,并且足够聪明,只需将 SYSTEM_INCLUDE_DIRECTORY/festival 添加到搜索路径。 好的,谢谢。我对自动工具感到困惑。这是正确的答案。【参考方案3】:

一些平台已采用文件系统层次结构标准 - http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard。

这应该真正反映在 autoconf 中,而不是坚持用户应该通过设置 CFLAGS 来处理它,因为 /opt/openssl/lib 不再是“非标准”位置。

FHS 还指定 /usr/local 是“本地数据的第三层次结构,特定于该主机”。所以可以说,/opt 真的应该首先检查。

更多关于 FHS /opt -> http://www.pathname.com/fhs/pub/fhs-2.3.html#OPTADDONAPPLICATIONSOFTWAREPACKAGES

【讨论】:

以上是关于使用 autoconf 查找自定义包含目录的主要内容,如果未能解决你的问题,请参考以下文章

jQuery创建一个自定义过滤器,用于查找包含数据的元素

Vs2010 中怎么包含自定义的环境变量?

找不到自定义标签的 CFML 模板

使用 MSBuild 构建 gRPC dotnet 核心项目时如何包含自定义目录

将包含自定义目标的目录导出到消费者

Visual Studio 自定义包含路径在链接时导致符号错误