1

我正在从相同的 C 源文件构建两个目标 - 一个可执行文件和一个共享库。共享库要求代码可重定位(使用 -fPIC 编译),但由于各种原因,我无法在可执行文件中使用可重定位代码。在 Makefile 中是否有处理这种情况的标准/通用方法?

4

2 回答 2

1

我建议你有两个目标文件目录,一个用于标准对象,一个用于可重定位对象。像这样的东西:

$(STANDARD_OBJS) = $(addprefix $(STANDARD_OBJS_DIR)/, $(OBJS))
$(RELOC_OBJS) = $(addprefix $(RELOC_OBJS_DIR)/, $(OBJS))

$(RELOC_OBJS_DIR)/%.o: CCFLAGS += -fPic
$(RELOC_OBJS_DIR)/%.o $(STANDARD_OBJS_DIR)/%.o: $(SRC)/%.cc
    g++ $< -o $@

(有更复杂的变化,但这会让你开始。)

于 2013-01-10T23:36:51.253 回答
0

注入一些规则,以便二进制构建的目标依赖并使用 static_lib。

shared_lib:随便什么.so ...

static_lib: 随便.a ...

二进制:static_lib

于 2013-01-08T22:24:26.120 回答