代码之家  ›  专栏  ›  技术社区  ›  dwc

为共享库生成文件?

  •  5
  • dwc  · 技术社区  · 16 年前

    我刚刚编写了一个makefile来构建一个共享库,如下所示:

    libmystuff.so: CFLAGS+=-fPIC -shared
    libmystuff.so: libmystuff.o otherstuff.o
        $(CC) $(CFLAGS) -o $@ $^
    

    当这似乎是一个常见的操作时,我喜欢避免执行显式操作,但似乎没有隐式规则或其他内置的标准化操作。我现在正在Linux上使用GNUmake,但也需要它在OSX上工作。

    编辑 :我问的是生成规则,而不是编译器/链接器标志。

    您能推荐干净的、可重用的makefile规则来构建共享libs吗?也许是 %.so: .c.so: 类型规则?

    2 回复  |  直到 16 年前
        1
  •  9
  •   ephemient    16 年前

    为了便于携带,我将研究集成 libtool .

    define compile_rule
            libtool --mode=compile \
            $(CC) $(CFLAGS) $(CPPFLAGS) -c $<
    endef
    define link_rule
            libtool --mode=link \
            $(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS)
    endef
    
    LIBS = libmystuff.la
    libmystuff_OBJS = libmystuff.lo otherstuff.lo
    
    %.lo: %.c
            $(call compile_rule)
    
    libmystuff.la: $(libmystuff_OBJS)
            $(call link_rule)
    
    install/%.la: %.la
            libtool --mode=install \
            install -c $(notdir $@) $(libdir)/$(notdir $@)
    install: $(addprefix install/,$(LIBS))
            libtool --mode=finish $(libdir)
    

    利伯特 将自动添加 -fPIC / -DPIC / -shared 根据需要标记,并生成 .o / .a / .so 文件将在当前平台上使用。

    或者你可以用 Automake 的libtool集成。

        2
  •  5
  •   Artyom    16 年前

    构建共享库依赖于平台。例如,您使用的标志是 对于ELF平台的gcc,例如cygwin,您不需要为其他一些平台和需要其他标志的编译器添加-fpic。

    您需要一个:

    • 提供为用户平台设置标志的选项。
    • 使用标准构建系统,如自动工具