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

标签 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 包含所有头文件,并且每个实现文件都包含对其各自头文件的包含。

最佳答案

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

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

关于c - 努力让 Makefile 使用单独的头文件和源文件目录运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33189556/

相关文章:

c - Makefile,更好理解规则

C 解析/proc/stat 以计算每个核心的当前 CPU 使用率

c - 二十一点程序的多个问题(发牌、错误、命中)

c - 如何在Windows Makefile中定义变量

perl - 通过 perl 脚本调用 make 实用程序/文件

c++ - 链接对象和静态库

android - AOSP构建错误

c - 为什么允许指向不完整类型的指针而不是不完整类型的变量?

c - 在任意排序中无效使用带有 memcpy 的 void 表达式

C : Recursive Function to Iterative