加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 共享库的Makefile?

发布时间:2020-12-13 19:07:11 所属栏目:Linux 来源:网络整理
导读:我刚刚编写了一个Makefile来构建一个共享库,类似于以下内容: libmystuff.so: CFLAGS+=-fPIC -sharedlibmystuff.so: libmystuff.o otherstuff.o $(CC) $(CFLAGS) -o $@ $^ 当这似乎是一种常见操作时,我喜欢避免执行显式操作,但似乎没有隐式规则或其他内置函

我刚刚编写了一个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集成.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读