用于混合C / C ++源的Makefile

问题描述 投票:0回答:2

假设我有以下设置

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来源不会被编译)。

如何?

c++ c makefile
2个回答
© www.soinside.com 2019 - 2024. All rights reserved.