2012-09-26 30 views
0

我有一个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 

我甚至试图改变目标的名称。但没有帮助。无法继续进一步。

+0

您已指定'exe'这里'$(CC)$(CFLAGS的一个输入端)$(DBUG)workfile.o insert.o exe'。这是打算?也许你的意思是'-o exe' – luk32

+0

@ luk32是的。 :) – Shash

+0

如果你打算这么做,那么在规则运行之前'exe'必须存在。你只是放错了'-o'选项。 –

回答

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) 
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并在需要时在CFLAGS-g。这是它在普通Makefiles中的使用方式。

+0

非常感谢!有效。 – Shash

1

呃我明白了......你在cflags中有一个-o。我认为你不应该在CFLAGS中使用-o,因为它需要一个参数。

是可以改变的最重要的部分:

CFLAGS = 
OUTFILE = fancy_exe 
[...] 
$(CC) $(CFLAGS) $(DBUG) workfile.o insert.o -o $(OUTFILE) 

这应该更好地工作......甚至跳过OUTFILE varaible并用手把exe文件。