【发布时间】:2018-03-03 09:44:45
【问题描述】:
假设我有以下设置
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 源不会被编译)。
怎么做?
【问题讨论】: