对旧式Makefile非常满意,我正在寻找libtool的简单替代品。我不想切换到automake,当我尝试直接使用它时,我一直遇到libtool的问题。最新的一个是“不支持的硬编码属性”,我厌倦了缺乏完整的文档,只是告诉我这次出了什么问题......
我只想用正确的标志编译一堆.o文件,然后将它们链接到一个共享库,这样它就可以在尽可能多的平台上运行。有什么东西可以做到这一点,而不是强迫我同时切换所有其他工具吗?
答案 0 :(得分:6)
我不确定它是否适合您的工作流程,但我建议您查看CMake。它适用于Windows,Linux和Mac,不应强迫您更改任何其他工具。你必须自己判断它的适用性。
答案 1 :(得分:3)
鉴于您对Milliams回答的评论中的描述,
我只想要一个我告诉的工具:“给我编译器标志,以便我可以编译这些n个文件以便在共享库中使用,然后给我命令将它们链接在一起”,
那么libtool可能是这项工作最简单的工具。我知道别无选择。
对于使用带有普通makefile的libtool的文档几乎不存在,你说得对,但libtool肯定不需要你切换到automake。跨平台库很难,你必须为它们支付的价格是libtool。 (或者折扣价格可能是libtool + automake + autoconf或CMake或Jam。)
答案 2 :(得分:3)
有jlibtool(与java无关)。
它是用C语言编写的,可以与您的源代码捆绑在一起。
最初是apache project,但无论谁在那里工作,似乎都在2004年左右放弃了它。
它由FreeRADIUS项目维护人员Alan Dekok接管,他对代码进行了现代化并修复了一些棘手的问题。我们将它用于FreeRADIUS项目(> = 3.0.0)来完成所有构建时间链接。
答案 3 :(得分:1)
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