将一个命令转换为具有不同参数的不同命令

时间:2015-06-22 02:48:16

标签: macos unix command-line

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

2 个答案:

答案 0 :(得分:0)

正确的解决方案是以允许您指定构建静态库的命令的方式编写Makefile。例如:

# Linux
MAKESTATICLIB = ar rcs

# Mac OS X
MAKESTATICLIB = libtool -static -o

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

答案 1 :(得分:0)

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

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

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

我怀疑你还需要创建一个"包装器"名为ranlib的脚本什么都不做。

[P.S。我的例子忽略了你的问题陈述中潜伏的奇怪rcs,我怀疑这是一种错误。]