【问题标题】:Converting one command into different command with different parameters将一个命令转换为具有不同参数的不同命令
【发布时间】:2015-09-07 09:43:12
【问题描述】:

在 Mac OS X 上,此命令

ar rcs libio.a a.o b.o c.o

应该转换成:

libtool -static -o libio.a a.o b.o c.o 

获取正确的静态库。

那么,在命令行或makefile中执行ar ...时,如何自动调用libtool ...?我可以通过提出一个解析和调用libtool 的新ar 命令来隐藏旧的ar 命令,但我想知道可能有更简单的方法。

【问题讨论】:

  • 如果ar 的第一个参数不是 rcs 会发生什么?这种转换应该是通用的吗?
  • @Scott Hunter:应该有参数(rcs 是三个参数)。我总是需要用新的 libtool 替换旧的 ar,所以我认为它是通用的。
  • rcs 怎么可能是 3 个参数?您的 conversion 似乎完全忽略了它/它们。
  • rcs 是一种模式和两种选择:r 表示“在 ar 文件中添加或替换文件”,c 表示“如果需要,无需抱怨就创建 ar 文件”, s 表示“在 ar 文件中添加/更新符号表”。

标签: macos unix command-line


【解决方案1】:

正确的解决方案是编写 Makefile,让您指定构建静态库的命令。示例:

# Linux
MAKESTATICLIB = ar rcs

# Mac OS X
MAKESTATICLIB = libtool -static -o

# Usage
libio.a: a.o b.o c.o
        $(MAKESTATICLIB) $@ $^

【讨论】:

    【解决方案2】:

    如果你真的想写一个包装脚本,它看起来像这样:

    libfile=$1
    shift
    libtool -static -o $libfile $*
    

    您可以将其放入名为“ar”的文件中,使其可执行 (chmod +x ar),然后将其放入您的搜索路径可以找到它的目录中,可能是您的个人 bin 目录,也可能是 /usr/local /斌/。 (如果您的搜索路径包含当前目录,您也可以将其放在当前目录中,但出于安全原因,通常不鼓励这样做。)

    我怀疑您还需要创建一个名为 ranlib 的“包装”脚本,它什么都不做。

    [附注我的示例忽略了隐藏在您的问题陈述中的奇怪 rcs,我怀疑这是某种错误。]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-29
      • 2014-11-12
      • 2020-10-02
      • 2020-05-06
      • 2020-02-25
      • 2015-04-06
      • 2010-09-17
      • 1970-01-01
      相关资源
      最近更新 更多