努力让Makefile运行时使用单独的头文件和源文件目录

时间:2015-10-17 17:34:03

标签: c makefile

我真的很难让这个Makefile正常运行。我得到的当前错误是:

make: Iheader: Command not found
Makefile: 18: recipe for target 'object/fcfs.o' failed
make: [object/fcfs.o] Error 127 (ignored)
Iheader -MMD -MP -c -o object/sjf.o src/sjf.c

然后对每个实现文件重复此错误。我仍然是构建自己的make文件的新手,我觉得这是一个我错过的简单错误。我试过谷歌搜索,到目前为止我找到的解决方案都没有为我工作。

source
|__header
|    |__fcfs.h
|    |__hpf.h
|    |__rr.h
|    |__sjf.h
|
|__object
|
|__src
|    |__fcfs.c
|    |__hpf.c
|    |__main.c
|    |__rr.c
|    |__sjf.c
|
|__Makefile

生成文件:

INC_DIR   := header
SRC_DIR   := src
OBJ_DIR   := object

CC        := gcc
CPPFLAGS  := -I$(INC_DIR) -MMD -MP

SOURCES := $(wildcard $(SRC_DIR)/*.c)
OBJECTS := $(SOURCES:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
DEPS    := $(wildcard $(OBJ_DIR)/*.d)

.PHONY: clean

main: $(OBJECTS)
    $(CC) $(LDFLAGS) $^ -o $@

$(OBJECTS): $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
    $(CPPFLAGS) -c $(OUTPUT_OPTION) $<

clean: ; $(RM) $(DEPS) $(OBJECTS)

-include $(DEPS)

$(MAKEFILE_LIST): ;
%.h: ;
%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%

我的main.c包含所有头文件,每个实现文件都包含一个包含在各自标题中的文件。

1 个答案:

答案 0 :(得分:2)

缺少将.c文件编译为.o对象的实际命令。将$(CC)添加到食谱中:

$(OBJECTS): $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
    $(CC) $(CPPFLAGS) -c $(OUTPUT_OPTION) $<
    ^^^^^