我刚刚编写了一个Makefile来构建一个共享库,类似于以下内容:
libmystuff.so: CFLAGS+=-fPIC -shared
libmystuff.so: libmystuff.o otherstuff.o
$(CC) $(CFLAGS) -o $@ $^
当这似乎是一种常见操作时,我喜欢避免执行显式操作,但似乎没有隐式规则或其他内置函数来标准化它.我目前正在Linux上使用GNU Make,但是它也需要在OS X上运行.
编辑:我问的是make规则而不是编译器/链接器标志.
最佳答案
为了便于携带,我将研究集成
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集成.
原文地址:https://www.jb51.cc/linux/440396.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。