添加路径AC_CHECK_LIB(Adding a path to AC_CHECK_LIB)

2019-07-29 01:06发布

我有configure.ac以下问题:

我想,因为我必须使用这些库中一些疯狂的文件夹添加库搜索路径。 我的想法是一个选项做到这一点:

AC_ARG_WITH([cplex-lib-path],
  [AS_HELP_STRING([--with-cplex-libs], [location of the CPLEX library])],
  [CPLEX_LIBS="-L$withval --lcplex"],
  [])

如果有人指定库路径我当然想看看如果库可以发现:

AC_CHECK_LIB([cplex], [CPXcreateprob], [],
[
  AC_MSG_ERROR([Could  not find CPLEX library])
])

不过,我想给CPLEX_LIBS添加到AC_CHECK_LIB的库搜索路径。 这在某种程度上可能吗?

Answer 1:

这是用户的负有责任告诉configure脚本,这些库。 有提供给用户很多选择,最常见的是:

configure LDFLAGS=-L/p/a/t/h

绝对没有任何理由维护者修​​改构建脚本在所有以适应这一点,用户,和许多很好的理由不尝试做任何事情。 如果你(作为一个用户)发现自己的图书馆是在许多地方,你可以在你的环境中设置LDFLAGS,或在config.site。 您的工具链可能有其他机制(例如,如果你正在使用gcc,你可以简单地设置LIBRARY_PATH)。 由autoconf的提供的基础设施已经提供了足够的机制来处理这个问题,并包维护者是关闭不重新发明轮子,并提供非标准接口更好。

现在,我已经认为你不应该做你正在尝试做的,我会告诉你如何做到这一点。 AC_CHECK_LIB将使用LDFLAGS价值为它的搜索,所以你可以这样做:

LDFLAGS="$LDFLAGS $CPLEX_LIBS"     # this is a bug

这是错误的,因为你现在有一个-l标志LDFLAGS,但-l参数在属于LIBS 。 另外,如果你将有另一个库,libfoo时,和$ FOO_LIBS指向不同的位置,根本就没有办法来消除歧义:LDFLAGS将得到-L / CPLEX和-L / foo和用户将不知道是哪一个至上而不能在其他保障联动对一个库。 总之,不要使用CPLEX_LIBS:教育你的用户使用LDFLAGS。 此外,它是更方便的类型:

configure LDFLAGS='-Lpath1 -Lpath2' 

比它要键入

configure --with-cplex=path1 --with-foo=path2

后者混淆的事情,并导致一个没有受过教育的民众。 我永远无法理解为什么人们喜欢把这些--with-LIB = / P / A / T / H方案在其构建的:他们提供任何有用的。



文章来源: Adding a path to AC_CHECK_LIB
标签: autotools