【问题标题】:Porting shared library ELF projects in autoconf to OS X将 autoconf 中的共享库 ELF 项目移植到 OS X
【发布时间】:2010-07-04 01:17:49
【问题描述】:

如何使用 autoconf 宏有条件地更改配置脚本或 Makefile 中的值,它通过 AC_OUTPUT 输出。

目标是使用 AC_CANONICAL_TARGET 或其他方式来识别我在 OS X 上,然后通过删除 -shared 并将 -soname 替换为 -dylib_install_name 来允许我的 Makefile 适应 LDFLAGS。

所以我基本上需要学习如何使用检查目标主机的条件语句来修改 configure.ac 文件中的 AC_SUBST 值或局部变量。

我必须补充一点,我一直在尝试使用 AC_COMPILE_IFELSE 和 AC_LANG_PROGRAM 来编译此代码。

#include <unistd.h>
#ifndef __APPLE__
error: This is not apple Darwin
#endif

虽然我没有收到任何错误,但我无法真正确认它是否有效。当我在 FreeBSD 或 Darwin 上运行新脚本时,没有与之相关的输出。我也总是使用 autoconf -Wall。

AC_COMPILE_IFELSE 的第二个和第三个参数是 [is_darwin=yes], [is_darwin=no] 但我如何访问这些值?

非常感谢您的任何帮助。

【问题讨论】:

  • 我想我已经通过在 AC_COMPILE_IFELSE 的第二个和第三个参数中设置局部变量来解决这个问题。它似乎有效,我只是很难理解这些参数实际上是 Shell 执行,因此您可以像使用其他任何变量一样使用这些变量。
  • 我不确定你在做什么,但听起来你正在尝试抽象平台特定的东西来构建共享库。如果是这样,只需使用 libtool - 这就是它的用途!

标签: c autoconf


【解决方案1】:

为了解决这个问题,我将回答它,AC_COMPILE_IFELSE 的第二个和第三个参数中的那些变量在整个 configure.ac 脚本中都可以作为 SHELL 变量使用。事实上,我通过在这两个参数中放置多个变量定义来解决这个问题,因为它们接受多行 Shell 代码,而不仅仅是一个变量定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    相关资源
    最近更新 更多