gpt4 book ai didi

linux - 共享库的 Makefile?

转载 作者:IT王子 更新时间:2023-10-29 01:05:36 26 4
gpt4 key购买 nike

我刚刚编写了一个 Makefile 来构建共​​享库,类似于以下内容:

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

当这看起来像是一个常见的操作时,我喜欢避免执行显式操作,但似乎没有隐式规则或其他内置规则来对此进行标准化。我目前在 Linux 上使用 GNU Make,但在 OS X 上也需要它。

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

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

最佳答案

为了便携性,我会考虑集成 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)

libtool 会根据需要自动添加 -fPIC/-DPIC/-shared 标志,并生成任何内容.o/.a/.so 文件将在当前平台上使用。

或者您可以使用 Automake的 libtool 集成。

关于linux - 共享库的 Makefile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/885451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com