【问题标题】:Adding a path to AC_CHECK_LIB添加 AC_CHECK_LIB 的路径
【发布时间】:2012-04-17 21:53:59
【问题描述】:

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 的库搜索路径中。这有可能吗?

【问题讨论】:

    标签: autotools


    【解决方案1】:

    告诉配置脚本库在哪里是用户的责任。有许多可供用户使用的选项,最常见的是:

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

    在这一点上,维护者完全没有理由修改构建脚本以适应用户,并且有很多很好的理由不尝试做任何事情。如果您(作为用户)发现您的库位于多个位置,您可以在您的环境或 config.site 中设置 LDFLAGS。您的工具链可能有其他机制(例如,如果您使用 gcc,您可以简单地设置 LIBRARY_PATH)。 autoconf 提供的基础设施已经提供了很多机制来处理这个问题,包维护者最好不要重新发明轮子并提供非标准接口。

    既然我已经争辩说你不应该做你想做的事,我会告诉你怎么做。 AC_CHECK_LIB 将使用 LDFLAGS 中的值进行搜索,因此您可以这样做:

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

    这是错误的,因为您现在在 LDFLAGS 中有一个 -l 标志,但 -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 选项:它们没有提供任何有用的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-19
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      相关资源
      最近更新 更多