mingw32-make模式规则不起作用

时间:2015-11-05 23:26:51

标签: makefile mingw32

最近我和mingw32-make合作设置了一个学习项目。

目标是实现一个简单的makefile,它将从不同的文件夹中获取源文件,将所有生成的目标文件放在/ build文件夹中,将最终的可执行文件放在/ bin文件夹中(请参阅下面的预期结构)。 / p>

+-- bin (for binaries)
+-- build (for .o files)
+-- include
+-- lib
+-- src
     +-- main (.c and .h files)
     +-- xml (.c and .h files)

这是生成的makefile(实际上有效):

# compiler identifier
CC=g++
# compiler options
CFLAGS=-c -Wall

SRC_DIR    := src
INC_DIR    := include
LIB_DIR    := lib
BUILD_DIR  := build
BIN_DIR    := bin

MODULES    := main xml
SRC_DIRS   := $(addprefix $(SRC_DIR)/,$(MODULES))
SRC_FILES  := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c))
OBJ_FILES  := $(patsubst $(SRC_DIR)/%,$(BUILD_DIR)/%,$(SRC_FILES:.c=.o))
OBJ_DIRS   := $(patsubst $(SRC_DIR)/%,$(BUILD_DIR)/%,$(SRC_DIRS))

.PHONY: all clean

all : clean main

main: $(OBJ_FILES)
    $(CC) $^ -o $(BIN_DIR)/$@

$(OBJ_FILES) : 
    $(CC) $(CFLAGS) $(INC_MOD) $(INC) $(patsubst $(BUILD_DIR)/%, $(SRC_DIR)/%, $(patsubst %.o, %.c, $@)) -o $@

clean: $(OBJ_DIRS)

$(OBJ_DIRS):
    mkdir $@
    del $@\* /f /q

print-% : ; @echo $* = $($*)

现在,它可以工作,但我很确定以下行不是100%正确:

 $(OBJ_FILES) : 
        $(CC) $(CFLAGS) $(INC_MOD) $(INC) $(patsubst $(BUILD_DIR)/%, $(SRC_DIR)/%, $(patsubst %.o, %.c, $@)) -o $@

这基本上是一个解决方法,因为mingw32-make似乎不支持这样的模式规则:

%.o : %.c
        $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@

主要问题是:还有其他人有同样的问题吗? 有人可以表明更好的实施吗?谢谢。

0 个答案:

没有答案