使用 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
选项旨在启用或禁用其他包的使用。搜索路径的实际配置发生在LDFLAGS
和CPPFLAGS
。【参考方案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 查找自定义包含目录的主要内容,如果未能解决你的问题,请参考以下文章