我的Makefile就是不起作用。
我有一个makefile,但它不工作。你们能帮我找出错误在哪里吗?谢谢我的Makefile就是不起作用。,makefile,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 #wor
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
我甚至试着改变目标的名字。但是没有帮助。不能再继续了 您的
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
注:您可以根据需要剥离
DBUG
并将-g
粘贴在CFLAGS
中。这就是它在普通makefile中的用法。您的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
注:您可以根据需要剥离
DBUG
并将-g
粘贴在CFLAGS
中。这就是它在普通makefile中的用法。嗯,我知道了。。。在cflags中有一个-o
。我认为您不应该在CFLAGS
中使用-o
,因为它需要一个参数
可以改变的重要部分:
CFLAGS =
OUTFILE = fancy_exe
[...]
$(CC) $(CFLAGS) $(DBUG) workfile.o insert.o -o $(OUTFILE)
这应该更有效。。。或者甚至跳过outfile变量,手工输入exe。嗯,我知道了。。。在cflags中有一个
-o
。我认为您不应该在CFLAGS
中使用-o
,因为它需要一个参数
可以改变的重要部分:
CFLAGS =
OUTFILE = fancy_exe
[...]
$(CC) $(CFLAGS) $(DBUG) workfile.o insert.o -o $(OUTFILE)
这应该更有效。。。或者甚至跳过outfile变量并手动放置exe。我认为将
-o
放在CFLAGS
中不是一个好主意,我宁愿从中删除-o
CFLAGS=-o
->CFLAGS=
现在您可以使用exe
,输出路径应该立即跟随-o
exe: workfile.o insert.o
$(CC) $(CFLAGS) $(DBUG) workfile.o insert.o exe
=>
因此,完整的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)
我认为将
-o
放在CFLAGS
中不是一个好主意,我宁愿从中删除-o
CFLAGS=-o
->CFLAGS=
现在您可以使用exe
,输出路径应该立即跟随-o
exe: workfile.o insert.o
$(CC) $(CFLAGS) $(DBUG) workfile.o insert.o exe
=>
因此,完整的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)
您已将
exe
指定为此处的输入之一$(CC)$(CFLAGS)$(DBUG)workfile.o insert.o exe
。这是有意的吗?也许你的意思是-o exe
@luk32是的,这是故意的。:)如果您打算这样做,则在规则运行之前必须存在exe
。你只是把-o
选项放错了地方。@Shash真的吗?exe是输入的一部分吗?因为您似乎将-o放错了位置,exe
是输出文件名,而不是输入文件的一部分=P@luk32我可以使用我的makefile,它现在运行良好。我之前想感谢你们这些好人。我已删除了我令人困惑的评论。:)您已将exe
指定为此处的输入之一$(CC)$(CFLAGS)$(DBUG)workfile.o insert.o exe
。这是有意的吗?也许你的意思是-o exe
@luk32是的,这是故意的。:)如果您打算这样做,则在规则运行之前必须存在exe
。你只是把-o
选项放错了地方。@Shash真的吗?exe是输入的一部分吗?因为您似乎将-o放错了位置,exe
是输出文件名,而不是输入文件的一部分=P@luk32我可以使用我的makefile,它现在运行良好。我之前想感谢你们这些好人。我已删除了我令人困惑的评论。:)