2

我正在尝试编写一个 configure.ac 文件,以便生成的配置脚本搜索包含给定静态库的库目录,例如 libsomething.a。我怎样才能做到这一点?目前我只检查一个位置:

AC_CHECK_FILE([/usr/local/lib/libsomething.a],[AC_SUBST(libsomething,"-L/usr/local/lib -lsomething")],[AC_SUBST(libcfitsio,'')])

但我希望它尝试自动找到它。如果该库不在默认位置之一,我想配置说未找到该库,并且可以像通常那样使用 --use-something=path 指定自定义位置。所以我还需要检查是否提供了 --use-something=path 。我在创建配置文件方面很新,而且 M4 文档不是很容易理解,所以希望能提供任何帮助。

谢谢!

4

2 回答 2

16

搜索库的安装位置不是配置的工作。它应该只确保它们对链接器可用。如果用户将它们安装在不同的位置,他知道如何调用./configure CPPFLAGS=-I/the/location/include LDFLAGS=-L/the/location/lib以便工具找到库(这在标准文件的--help输出configure和标准INSTALL文件中进行了解释)。

此外--with-package--enable-package宏不应该用于指定路径,这与许多第三方宏会做的相反。GNU 编码标准明确禁止这种用法:

不要使用--with选项来指定用于查找某些文件的文件名。这超出了--with选项的范围。

CPPFLAGS并且LDFLAGS已经在这里解决问题,那么为什么要重新开发和维护另一种机制呢?

于 2009-10-02T08:49:13.647 回答
2

解决这个问题的最好方法是查看其他类似的 autoconf 宏。Autoconf 宏是 Bourne shell 脚本和 M4 代码的混合体,因此它们可以真正解决任何可计算的问题。

这是我为MySQL++编写的宏的链接:mysql++.m4

于 2009-09-30T23:58:47.567 回答