0

我有一个无法正常工作的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

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

4

3 回答 3

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并粘贴。这就是它在普通 Makefile 中的使用方式。-gCFLAGS

于 2012-09-26T10:10:18.930 回答
1

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

可以更改的重要部分:

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

这应该会更好......甚至跳过 outfile 变量并手动放置 exe。

于 2012-09-26T10:14:17.013 回答
1

我不认为放入 是一个好主意-oCFLAGS我宁愿从中删除-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)
于 2012-09-26T10:16:42.553 回答