作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将所有 .o 文件放在不同的目录中。
他可以创建所有 .o 文件,但他可以创建 .exe 文件
我的生成文件:
CC = gcc
SRC = $(wildcard *.c)
OBJ = $(SRC:.c=.o)
EXEC = exe
CFLAGS = -Wall -pedantic -std=c11 -g
all : $(EXEC)
%.o : %.c
$(CC) -o prog/$@ -c $< $(CFLAGS)
$(EXEC) : $(OBJ)
$(CC) -o $@ prog/$^ $(CFLAGS)
clean : rm -rf *.o
mrproper : clean rm -rf $(EXEC)
shell(Ubuntu)中有结果:
gcc -o prog/a.o -c a.c -Wall -pedantic -std=c11 -g
gcc -o prog/b.o -c b.c -Wall -pedantic -std=c11 -g
gcc -o prog/main.o -c main.c -Wall -pedantic -std=c11 -g
gcc -o exe prog/a.o b.o main.o -Wall -pedantic -std=c11 -g
gcc: error: b.o: No file or directory
gcc: error: main.o: No file or directory
Makefile:13: recipe for target 'exe' failed
make: * [exe] Error 1
PS : a.c : 打印 A , b.c : 打印 B 等 main.c 使用 a.c 和 b.c
最佳答案
我看到两个问题:
%.o
规则实际上不会创建 %.o
文件。prog/$^
扩展为 prog/a.o b.o main.o
因为 $(OBJ)
是 a.o b.o main。 Ø
。我会这样做:
不要写 OBJ = $(SRC:.c=.o)
,而是写
OBJ = $(SRC:%.c=prog/%.o)
目标文件的规则就变成了
prog/%.o : %.c
$(CC) -o $@ -c $< $(CFLAGS)
可以使用以下命令创建可执行文件
$(EXEC) : $(OBJ)
$(CC) -o $@ $^ $(CFLAGS)
最后,出于理智原因,您的清理规则可能应该是
clean :
rm -rf prog/*.o
mrproper : clean
rm -rf $(EXEC)
关于c - Makefile : How to put all the . o 目录中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53697862/
我是一名优秀的程序员,十分优秀!