代码之家  ›  专栏  ›  技术社区  ›  Kasper Peeters

简单的libtool替代?

  •  10
  • Kasper Peeters  · 技术社区  · 16 年前

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

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

    4 回复  |  直到 8 年前
        1
  •  3
  •   Arran Cudbard-Bell    12 年前

    jlibtool (与Java无关)。

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

    它原来是一个 apache project 但是无论是谁在那里工作,似乎都在2004年左右放弃了它。

    它被Freeradius项目维护人员Alan Dekok接管,他对代码进行了现代化,并解决了一些琐碎的问题。我们将它用于freeradius项目(>=3.0.0),以进行所有构建时链接。

        2
  •  6
  •   Milliams    16 年前

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

        3
  •  3
  •   ptomato    16 年前

    在对米利亚姆答案的评论中给出了你的描述,

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

    那么libtool很可能是最简单的工作工具。我知道别无选择。

    对于将libtool与plain makefiles一起使用的文档实际上不存在,您是对的,但是libtool当然不要求您切换到automake。跨平台库是很困难的,您必须为它们支付的价格是libtool。(或者折扣价可能是libtool+automake+autoconf或cmake或jam。)

        4
  •  1
  •   Nikodem Zawadzki    8 年前

    slibtool(dl.midipix.org/slibtool,git://midipix.org/slibtool)是一个libtool插入式替换,用C编写。一个slibtool二进制文件旨在无缝支持本机和交叉编译,该实用程序还提供一些附加功能(安装.la文件是可选的,可选的颜色编码注释等)。下面的minimal plain 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