假设我有以下设置
CPPSRC+=path1/foo.cpp
CPPSRC+=path2/main.cpp
CSRC+=path3/zoo.c
CSRC+=path4/bar.c
我想将所有目标文件.o
生成到build/
文件夹中(所以我假设需要两个pathsubst和模式匹配)。
我还需要用.cpp
和相关的g++
编译CXXFLAGS
,而.c
需要用gcc
和更简单的CFLAGS
编译。
我走到这一步:
CPPOBJ := $(CPPSRC:%.cpp=%.o)
COBJ := $(CSRC:%.c=%.o)
OBJ := $(COBJ) $(CPPOBJ)
BUILTOBJ := $(addprefix $(BUILD_PATH)/,$(notdir $(OBJ)))
$(APP): $(OBJ)
[...]
$(CPPOBJ): %.o: %.cpp
@echo "[g++" $(BUILD_PATH)$(notdir $@)"]"
$(SILENT)$(GPP) $(CXXFLAGS) $(INCLUDES) -c $< -o $(BUILD_PATH)$(notdir $@)
$(COBJ): %.o: %.c
@echo "[gcc " $(BUILD_PATH)$(notdir $@)"]"
$(SILENT)$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $(BUILD_PATH)$(notdir $@)
但无法达到$(COBJ): %.o: %.c
的先决条件(简而言之,.c
来源不会被编译)。
如何?