Autotools 将库与自动工具链接的正确方法

Autotools 将库与自动工具链接的正确方法,autotools,autoconf,automake,pkg-config,Autotools,Autoconf,Automake,Pkg Config,我需要将libmagic链接到我的项目,该项目是用自动工具构建的 我当前的解决方案是:LIBS+=“-lmagic”在configure.ac 但我认为实现这一点的更合适的方法是在configure.ac中使用PKG\u CHECK\u MODULES宏,在Makefile.am中使用LDADD=@MAGIC\u LIBS@,不幸的是,这不起作用 下面是我从/configure configure: error: Package requirements (magic) were not met

我需要将libmagic链接到我的项目,该项目是用自动工具构建的

我当前的解决方案是:
LIBS+=“-lmagic”
configure.ac

但我认为实现这一点的更合适的方法是在
configure.ac
中使用
PKG\u CHECK\u MODULES
宏,在Makefile.am中使用
LDADD=@MAGIC\u LIBS@
,不幸的是,这不起作用

下面是我从
/configure

configure: error: Package requirements (magic) were not met:

No package 'magic' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
我认为这与pkg config中没有libmagic有关,
有什么想法吗?

您需要一个用于libmagic的pkgconfig文件。如果PKG_CONFIG_路径中没有magic.pc,则必须编写自定义autoconf宏来设置magic_LIBS

我认为实现这一点更合适的方法是在
configure.ac
[…]中使用
PKG\u CHECK\u MODULES

仅当您实际拥有libmagic的pkg配置数据文件时,即使如此。据我所知,没有提供pkg配置文件。当然,你也可以自己写,但那会破坏目的

如果您要依赖安装在其中一个标准位置的头和库(这是传统的,非常合理的),那么配置构建的一种更惯用的方法是让
configure
测试它们的存在。比如说,

AC_CHECK_HEADER([magic.h], [], [
  AC_MSG_ERROR([required header magic.h not found])
])
AC_SEARCH_LIBS([magic_open], [magic], [], [
  AC_MSG_ERROR([required library libmagic not found])
])
请注意,如果找到
AC\u SEARCH\u LIBS()
将自动将
-lmagic
前置到
LIBS

通过提供
configure
选项,用户可以指定标题和库的替代位置,您可以变得更加有趣,但这似乎不是您想要的,而且对于libmagic来说,这似乎有点过头了