【发布时间】:2019-10-19 10:23:55
【问题描述】:
这是我的目录的样子:
src/
dir/
file2.c
file2.h
file1.c
file1.h
makefile
当我使用我的 makefile 时,我得到:
gcc: error: file2.o: No such file or directory
从 src 目录使用:gcc -c dir/file2.c dir/file2.h
我得到了在src 中创建的正确.o(这就是我想要的)。
但是使用makefile,我得到了上面的错误。
我的makefile最简单的版本:
CFLAGS = -ansi -Wall -pedantic -g -I$(LIBRE_INC) -Iinclude -std=gnu99
LDFLAGS = -lm
EXEC = out
CC = gcc
out : file1.o file2.o
${CC} -o $@ $^ $(CFLAGS) $(LDFLAGS)
file1.o: file1.c file1.h
file2.o: dir/file2.c dir/file2.h
%.o : %.c
${CC} -c $< $(CFLAGS) $(LDFLAGS)
品牌给出:
gcc -c file1.c -ansi -Wall -pedantic -g -I -Iinclude -std=gnu99 -lm
gcc -o out file1.o file2.o -ansi -Wall -pedantic -g -I -Iinclude -std=gnu99 -lm
gcc: error: file2.o: No such file or directory
makefile:7: recipe for target 'out' failed
make: *** [out] Error 1
我知道问题出在
%.o : %.c
${CC} -c $< $(CFLAGS) $(LDFLAGS)
但我不知道如何替换它
编辑: 我在每个有子目录的文件下添加了这一行,它工作了
${CC} -c $< $(CFLAGS) $(LDFLAGS)
如果有的话,我还在寻找更好的方法!
【问题讨论】:
-
关于这些语句:
CFLAGS = -ansi -Wall -pedantic -g -I$(LIBRE_INC) -Iinclude -std=gnu99 LDFLAGS = -lm EXEC = out CC = gcc这将导致 make 工具在每次引用宏时重新评估每个宏。强烈建议将=替换为:=