对老式 Makefile 非常满意,我正在寻找 libtool 的简单替代品。我不想切换到 automake,当我尝试直接使用 libtool 时,我一直遇到问题。最新的一个是“不受支持的硬编码属性”,我厌倦了缺乏完整的文档来告诉我这次出了什么问题......
我只想编译一堆带有正确标志的 .o 文件,然后将它们链接到一个共享库中,这样它就可以在尽可能多的平台上运行。有没有什么东西可以做到这一点,而不是强迫我同时切换所有其他工具?
对老式 Makefile 非常满意,我正在寻找 libtool 的简单替代品。我不想切换到 automake,当我尝试直接使用 libtool 时,我一直遇到问题。最新的一个是“不受支持的硬编码属性”,我厌倦了缺乏完整的文档来告诉我这次出了什么问题......
我只想编译一堆带有正确标志的 .o 文件,然后将它们链接到一个共享库中,这样它就可以在尽可能多的平台上运行。有没有什么东西可以做到这一点,而不是强迫我同时切换所有其他工具?
我不确定它是否适合您的工作流程,但我建议您查看CMake。它适用于 Windows、Linux 和 Mac,不应强迫您更改任何其他工具。不过,您必须自己判断其适用性。
鉴于您在对 Milliams 回答的评论中的描述,
我只想要一个告诉我的工具:“给我编译器标志,以便我可以编译这些 n 个文件以在共享库中使用,然后给我命令将它们链接在一起”,
那么 libtool 很可能是最简单的工具。我知道没有其他选择。
你是对的,使用 libtool 和普通 makefile 的文档实际上是不存在的,但 libtool 当然不需要你切换到 automake。跨平台库很难,你必须为它们付出的代价是 libtool。(或者折扣价可能是 libtool+automake+autoconf 或 CMake 或 Jam。)
slibtool (dl.midipix.org/slibtool, git://midipix.org/slibtool) 是一个 libtool 插件替代品,用 C 语言编写。单个 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