我正在为库项目添加autotool支持。它依赖于另一个自编写的库,它不一定在默认的库路径中。所以我在配置时会设置LDFLAGS。
尽管如此,我想检查库以警告用户正确设置LDFLAGS。因此我提出这一行:
AC_CHECK_LIB([foo], [foo_func],
[AC_DEFINE([HAVE_FOO, [1],
[Define if you have libfoo])],
[AC_MSG_WARN([libfoo not found.])])
现在,如果我没有设置LDFLAGS,则检查会按预期失败并打印警告。但是:当我运行make
时,代码仍会编译,因为我在环境变量LD_LIBRARY_PATH
中设置了库路径。我发现这令人困惑......我希望检查失败和代码不能编译或检查不会失败和代码编译。
我误解了AC_CHECK_LIB的含义或我做错了什么?
答案 0 :(得分:1)
AC_CHECK_LIB
并不关心你对图书馆存在与否的结论。它只是确定库是否存在并执行其第三个参数(如果是),如果不存在则执行第四个参数。
因此,获得您想要的逻辑取决于您。如果在第四个参数中将AC_MSG_WARN
替换为AC_MSG_ERROR
,如注释中的ldav1s所示,那么如果检查失败,则配置脚本将中止,并且代码将无法编译。