12

对老式 Makefile 非常满意,我正在寻找 libtool 的简单替代品。我不想切换到 automake,当我尝试直接使用 libtool 时,我一直遇到问题。最新的一个是“不受支持的硬编码属性”,我厌倦了缺乏完整的文档来告诉我这次出了什么问题......

我只想编译一堆带有正确标志的 .o 文件,然后将它们链接到一个共享库中,这样它就可以在尽可能多的平台上运行。有没有什么东西可以做到这一点,而不是强迫我同时切换所有其他工具?

4

4 回答 4

6

我不确定它是否适合您的工作流程,但我建议您查看CMake。它适用于 Windows、Linux 和 Mac,不应强迫您更改任何其他工具。不过,您必须自己判断其适用性。

于 2010-03-04T14:09:28.890 回答
5

jlibtool(与 java 无关)。

它是用 C 语言编写的,可以与您的源代码捆绑在一起。

它最初是一个apache 项目,但在那里工作的人似乎在 2004 年左右放弃了它。

它由 FreeRADIUS 项目维护者 Alan Dekok 接管,他对代码进行了现代化改造并修复了一些琐碎的问题。我们将它用于 FreeRADIUS 项目 (>= 3.0.0) 以完成所有构建时间链接。

于 2014-01-08T20:45:27.047 回答
3

鉴于您在对 Milliams 回答的评论中的描述,

我只想要一个告诉我的工具:“给我编译器标志,以便我可以编译这些 n 个文件以在共享库中使用,然后给我命令将它们链接在一起”,

那么 libtool 很可能是最简单的工具。我知道没有其他选择。

你是对的,使用 libtool 和普通 makefile 的文档实际上是不存在的,但 libtool 当然不需要你切换到 automake。跨平台库很难,你必须为它们付出的代价是 libtool。(或者折扣价可能是 libtool+automake+autoconf 或 CMake 或 Jam。)

于 2010-03-05T00:04:06.723 回答
3

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
于 2018-06-24T10:52:11.990 回答