我正在 OS X 上测试。我们有一个configure.ac
and Makefile.am
。 Autotools 选择错误AR
and ARFLAGS
对于平台。它发生在(和没有)AM_PROG_AR
in Makefile.am
:
$ egrep 'AR =|ARFLAGS =' Makefile
AMTAR = $${TAR-tar}
AR = ar
ac_ct_AR = ar
Autoconf 应该使用苹果的libtool
(不要混淆 Autotools'libtool
) and libtool
的旗帜。苹果libtool
正确处理胖库和交叉编译。它应该是就像是 https://github.com/weidai11/cryptopp/blob/master/GNUmakefile#L467:
AR = /usr/bin/libtool
ARFLAGS = -static -o
Apple's 将 UNIX/Linux 应用程序移植到 OS X https://developer.apple.com/library/content/documentation/Porting/Conceptual/PortingUnix/compiling/compiling.html没有讨论这个主题,我在 Autoconf 文档中搜索也找不到它。 Autoconf 文档还缺少AC_PROG_AR
(或类似)。看5.2.1 特定程序检查 https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Particular-Programs.html在 Autoconf 手册中。
我们如何告诉 Autoconf 使用 Apple 平台构建工具,而不是 Linux 构建工具?
$ autoconf --version
autoconf (GNU Autoconf) 2.69
$ automake --version
automake (GNU automake) 1.15.1
Autotools 选择错误AR
and ARFLAGS
对于平台。它发生在(和没有)AM_PROG_AR
in Makefile.am
: [...] Autoconf 应该使用 Apple 的libtool
我明白你想 configure
选择并使用 OS Xlibtool
创建档案,这样做会给你带来一些优势。 POSIXar
甚至可能是不适合您特定工作的工具,但我拒绝这样的说法:/usr/bin/ar
是错误的工具对于平台。 Apple 在 OS X 中提供了该工具,并且它按照广告中的方式工作,即使广告中的行为比您想要或需要的更受限制。
它应该是这样的:
AR = /usr/bin/libtool
ARFLAGS = -static -o
或许。虽然麦克libtool
可以执行与以下相同的功能ar
,它不是直接替代品。就是这样configure
当您在命令行上指定这些变量时会抱怨(但仅当您还具有AM_PROG_AR
)。特别是,如果您检查configure
您可能会发现它测试脚本指定的工具的行为AR
使用如下命令:
$AR cru libconftest.a conftest.$ac_objext >&5
它还将有一个由微软提供的界面的后备lib
公用事业。这两者都与AM_PROG_AR
macro.
请注意,测试对主要选项使用硬编码标志,而不是任何$ARFLAGS
这可能已被指定。它专门测试程序的命令行界面,以及Maclibtool
不提供一个被认可的。
您有多种选择:
-
让构建系统继续使用AM_PROG_AR
,并提供Mac的包装脚本libtool
模仿 POSIX 的传统命令行界面ar
。针对 Mac 进行配置时,将包装器脚本指定为configure
作为变量的值AR
.
./configure AR=my-mac-libtool-wrapper
-
如果构建系统does not use AM_PROG_AR
那么默认情况下AR
and ARFLAGS
变量将毫无意义configure
,但您可以直接指定它们make
:
make AR=/usr/bin/libtool ARFLAGS="-static -o"
-
或者,如果构建系统不使用AM_PROG_AR
然后你可以添加你自己的代码来制作configure
处理AR
and ARFLAGS
变量。最少能得到configure
识别它们并将它们传递到 Makefile 而不执行任何实际测试可能是:
AC_ARG_VAR([AR], [Specifies the archiver to use])
AC_ARG_VAR([ARFLAGS], [Specifies the archiver flags to use])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)