我编写了非常简单的makefile,我无法弄清楚它为什么工作不正确。我想把.o文件放在不同的目录中。 不幸的是我的.o文件不是在./obj/Debug中创建的,但它们在当前工作目录中与makefile所在的目录相同。是否应该在调用 make 之前创建这些目录?我无法找到我的错误。
SHELL = /bin/sh
.SUFFIXES:
.SUFFIXES: .c .o
CC := gcc # compiler type
CFLAGS = -Wall
Version := Debug
oPath = obj/$(Version)
app: header1.o main.o
$(CC) -Wall -o -v app $(oPath)/main.o $(oPath)/header1.o
$(oPath)/%.o: %.c header1.h
$(CC) $(CFLAGS) -c $< -o $@
我也尝试过:
$(oPath)/%.o: %.c header1.h
$(CC) $(CFLAGS) -c $< -o $(oPath)/$@
但没有成功。
答案 0 :(得分:2)
该行
app: header1.o main.o
告诉make app
依赖于当前工作目录中的header1.o
和main.o
,因此它使用隐式规则来构建它们,然后它们出现在该目录中。要解决此问题,请使用
app: $(oPath)/header1.o $(oPath)/main.o
然后 make
将使用您的模式规则构建$(oPath)/header1.o
和$(oPath)/main.o
,然后再为app
运行收件人。