简单的 libtool 替代方案?

12

对于旧式Makefile我非常满意,现在正在寻找一个简单的libtool替代方案。我不想切换到automake,并且当我直接使用libtool时总是遇到问题。最新的问题是'unsupported hardcode properties',我对缺乏完整文档感到厌烦,因为它只是告诉我这次又出了什么问题...

我只想用正确的标志编译一堆.o文件,然后将它们链接成一个共享库,以便在尽可能多的平台上使用。是否有什么工具只能做到这一点,而不强制我同时切换所有其他工具呢?


3
使用 automake 是否意味着你必须切换所有工具?自己编写 makefile 意味着你必须手动包含许多 automake 自动处理的内容。当我转用 automake 后,只有一件事情改变了:我的 150 行 Makefiles 变成了更为功能丰富的 10 行 Makefile.ams。所有其他工具保持不变。 - William Pursell
4个回答

6

我不确定它是否适合你的工作流程,但我建议看看CMake。它适用于Windows、Linux和Mac,不应强制你更改任何其他工具。不过你需要自己评判其适用性。


我知道CMake,但那比我要找的还要复杂一些。我不想切换我的Makefile系统到其他东西,我只想要一个工具,告诉它:“给我编译这些n个文件用于共享库所需的编译器标志,然后给我链接它们的命令”。 - Kasper Peeters

5

有一个与Java无关的工具jlibtool,它是用C语言编写的,可以直接与您的源代码捆绑使用。

最初它是一个Apache项目,但已经有人在2004年左右停止了开发。

现在,FreeRADIUS项目维护者Alan Dekok接管了它,并对代码进行了现代化和修复了一些问题。我们在FreeRADIUS项目 (>= 3.0.0) 中使用它来处理所有构建时的链接。


3

slibtool(dl.midipix.org/slibtool,git://midipix.org/slibtool)是一个用C语言编写的libtool替代品。单个slibtool二进制文件旨在无缝支持本地和交叉构建,并且该实用程序还提供了一些附加功能(安装.la文件是可选的,可选的彩色注释等)。以下最小的纯makefile演示了如何使用slibtool(交叉)构建库。

CC      = cc
LIBTOOL = slibtool
DESTDIR = destdir

all:    libfoo.la

a.lo:
    $(LIBTOOL) --mode=compile --tag=CC $(CC) -c a.c

libfoo.la: a.lo
    $(LIBTOOL) --mode=link --tag=CC $(CC) -o libfoo.la -rpath /lib

install: all
    mkdir -p destdir
    $(LIBTOOL) --mode=install cp libfoo.la $(DESTDIR)

# the -rpath argument is required for semantic compatibility with libtool.

本地构建,默认(包含共享库和静态库)

$ make
$ make install

本地构建,仅共享库

$ make LIBTOOL=slibtool-shared
$ make install

本地构建,仅使用静态库

$ make LIBTOOL=slibtool-static
$ make install

交叉编译,默认值

$ make CC=some-target-tuple-gcc
$ make install

跨平台构建,以默认方式进行,并具备很多颜色
$ make LIBTOOL=dlibtool CC=some-target-tuple-gcc
$ make install

3
鉴于您在Milliams答案评论中的描述,您只需要一个工具,告诉它:“给我编译器标志,以便我可以编译这些n个文件供共享库使用,然后给我连接它们的命令”,那么libtool可能是最简单的工具。 我不知道有其他选择。
您是正确的,使用纯makefile的libtool文档实际上不存在,但是libtool并不要求您切换到automake。 跨平台库很难,而为此付出的代价就是libtool。(或者也许是libtool + automake + autoconf或CMake或Jam的优惠价格。)

我对那个答案感到担忧...也许有人知道在configure.in中设置libtool的推荐方式,而不是通过automake来实现呢?(即仅使用autoconf,而不是automake)。 - Kasper Peeters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接