Makefile:来自相同源的两个目标使用不同的标志编译两次

时间:2013-01-03 19:56:01

标签: makefile

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

2 个答案:

答案 0 :(得分: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 $@

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

答案 1 :(得分:0)

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

shared_lib:whatever.so ...

static_lib:whatever.a ...

binary:static_lib