2010-07-20 75 views
3

因此,我正在为我的代码编写测试,并且要调用库函数(确保它在右侧调用正确的库调用时间,并且它适当地处理错误)。autotools:做“检查”时不包括库

我认为我是SOL与C标准库函数,但这些不是我正在使用的唯一库。

当建立我最后的可执行文件(不是我的测试可执行文件),我想用-lfuse,所以我包括在我configure.ac

AC_CHECK_LIB([fuse], [fuse_main]) 

然而,这也扔在-lfuse这条线时,它试图建立我check_PROGRAMS

有没有什么办法可以告诉自动工具,我不想-lfuse库建立我的测试可执行文件(make check)?然后,我应该可以根据需要将图书馆电话剔除出去,因为不会有任何其他链接使用同一个名称。

回答

1

我看到libfuse在其源代码发行版中提供了一个fuse.pc文件,因此检查它的正确方法是使用pkg-config。您可以在configure.ac

PKG_CHECK_MODULES([APPNAME], [fuse ...and any other libraries to check for...]) 

,然后

appname_CFLAGS += @[email protected] 
appname_LIBS += @[email protected] 
src/Makefile.am

。然后,不要将这些变量添加到您的测试程序中。

+0

谢谢。所以我可以选择PKG_CHECK_MODULES的第一个参数是一些任意的字符串,并且它定义了' _CFLAGS'等等?这很方便。 – rampion 2010-07-21 17:22:57

+0

没错。有关更多信息,请参见man pkg-config。 – ptomato 2010-07-21 19:25:51

0

好吧,我想我想通了a的解决方案。我不相信这是正确解决方案,所以我会在这里检查,看看是否有人可以想出更好的东西。

如果我更改了我的configure.ac

AC_SUBST([HAVE_LIBFUSE]) 
AC_CHECK_LIB([fuse], [fuse_main], [HAVE_LIBFUSE=1]) 

然后在src/Makefile.am手动添加-lfuse<appname>_LDADD标志,那么它包括在默认成功/失败的行动只是当我把主要的可执行文件,而且我在我的测试中可以自由地将函数剔除。

至少我认为我是,这足以让我现在继续前进。