我有一个不起作用的makefile。你能帮助我找出错误的位置吗?谢谢!
CC = gcc
FILES = workfile.c insert.c
TARGETS = exe
CFLAGS = -o
DBUG =
RM = rm -f
OBJS = *.o
#Master Rule
all: $(TARGETS)
#Build
exe: workfile.o insert.o
$(CC) $(CFLAGS) $(DBUG) workfile.o insert.o exe
#workfile
workfile.o: workfile.c
$(CC) $(DBUG) -c *.c
insert.o: insert.c
$(CC) $(DBUG) -c *.c
clean:
$(RM) $(TARGETS) $(OBJS)
错误如下
$make all
gcc -c *.c
gcc -o workfile.o insert.o exe
gcc: error: exe: No such file or directory
make: *** [exe] Error 1
我甚至尝试更改目标的名称。但没有帮助。无法继续下去。
答案 0 :(得分:1)
您的CFLAGS
被错误使用。 -o
选项应该在exe
之前,CFLAGS
应该包含编译器的相关标志(例如-O3 -Wall -Wextra -Werror
)。
试试这个:
CFLAGS = -Wall -Wextra -Werror
exe: workfile.o insert.o
$(CC) $(CFLAGS) $(DBUG) workfile.o insert.o -o exe
PS:您可以删除DBUG
并在需要时将-g
粘贴到CFLAGS
。这就是它在普通Makefile中的使用方式。
答案 1 :(得分:1)
呃,我明白了...你在cflags中有一个-o
。我认为你不应该在-o
中使用CFLAGS
,因为它需要一个参数。
可以改变的重要部分:
CFLAGS =
OUTFILE = fancy_exe
[...]
$(CC) $(CFLAGS) $(DBUG) workfile.o insert.o -o $(OUTFILE)
这应该更好......或者甚至跳过outfile变量并手动放入exe。
答案 2 :(得分:1)
我认为将-o
放入CFLAGS
并不是一个好主意,我宁愿从中移除-o
。
CFLAGS = -o
- > CFLAGS =
现在您可以使用exe
,输出路径应立即跟随-o
。
exe: workfile.o insert.o
$(CC) $(CFLAGS) $(DBUG) workfile.o insert.o exe
=>
exe: workfile.o insert.o
$(CC) $(CFLAGS) $(DBUG) -o exe workfile.o insert.o
因此完整的makefile应如下所示:
CC = gcc
FILES = workfile.c insert.c
TARGETS = exe
CFLAGS =
DBUG =
RM = rm -f
OBJS = *.o
#Master Rule
all: $(TARGETS)
#Build
exe: workfile.o insert.o
$(CC) $(CFLAGS) $(DBUG) -o exe workfile.o insert.o
#workfile
workfile.o: workfile.c
$(CC) $(DBUG) -o workfile.o -c workfile.c
insert.o: insert.c
$(CC) $(DBUG) -o insert.o -c insert.c
clean:
$(RM) $(TARGETS) $(OBJS)