我的Makefile不起作用。

时间:2012-09-26 10:04:52

标签: makefile

我有一个不起作用的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

我甚至尝试更改目标的名称。但没有帮助。无法继续下去。

3 个答案:

答案 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)