我正在测试OS X.我们有configure.ac
和Makefile.am
。 Autotools为平台选择了错误的AR
和ARFLAGS
。它发生在AM_PROG_AR
中的({和}} Makefile.am
:
$ egrep 'AR =|ARFLAGS =' Makefile
AMTAR = $${TAR-tar}
AR = ar
ac_ct_AR = ar
Autoconf应该使用Apple的libtool
(不要混淆Autotools'libtool
)和libtool
的标志。 Apple的libtool
正确处理胖库和交叉编译。它应该是something like:
AR = /usr/bin/libtool
ARFLAGS = -static -o
Apple的Porting UNIX/Linux Applications to OS X没有讨论这个话题,我找不到它搜索Autoconf文档。 Autoconf文档也缺少AC_PROG_AR
(或类似)。请参阅Autoconf手册中的5.2.1 Particular Program Checks。
我们如何告诉Autoconf使用Apple的平台构建工具,而不是Linux构建工具?
$ autoconf --version
autoconf (GNU Autoconf) 2.69
$ automake --version
automake (GNU automake) 1.15.1
答案 0 :(得分:3)
Autotools为平台选择了错误的
AR
和ARFLAGS
。在AM_PROG_AR
中{和}Makefile.am
发生了这种情况:[...] Autoconf应该使用Apple的libtool
我了解您希望 configure
选择并使用OS X libtool
来创建档案,这样做可以为您提供一些优势。 POSIX ar
甚至可能是适合您特定工作的不适合的工具,但我拒绝断言/usr/bin/ar
是平台的错误工具 。 Apple在OS X中提供了该工具,它的工作方式与广告一致,即使广告行为比您想要或需要的更加局限。
应该是这样的:
AR = /usr/bin/libtool ARFLAGS = -static -o
也许。虽然Mac libtool
可以执行与ar
相同的功能,但它不是替代品。这就是configure
在命令行中指定这些变量时所抱怨的内容(但只有当你还有AM_PROG_AR
时)。特别是,如果您检查configure
脚本,您可能会发现它使用如下命令测试AR
指定的工具的行为:
$AR cru libconftest.a conftest.$ac_objext >&5
它还将支持Microsoft lib
实用程序提供的界面。这两者都与AM_PROG_AR
宏相关联。
请注意,测试使用主要选项的硬编码标志,而不是可能已指定的任何$ARFLAGS
。它专门测试程序的命令行界面,Mac libtool
不提供可识别的界面。
您有几种选择:
让构建系统继续使用AM_PROG_AR
,并为Mac libtool
提供模仿POSIX ar
的传统命令行界面的包装脚本。配置Mac时,将包装器脚本指定为configure
作为变量AR
的值。
./configure AR=my-mac-libtool-wrapper
如果构建系统不使用AM_PROG_AR
,则默认情况下AR
和ARFLAGS
变量对configure
无意义,但您可以直接将它们指定给make
:
make AR=/usr/bin/libtool ARFLAGS="-static -o"
或者,如果构建系统不使用AM_PROG_AR
,那么您可以添加自己的代码,以使configure
处理AR
和ARFLAGS
变量。获得configure
识别它们并将它们传递给Makefile而不执行任何实际测试的最小值可能是:
AC_ARG_VAR([AR], [Specifies the archiver to use])
AC_ARG_VAR([ARFLAGS], [Specifies the archiver flags to use])