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