C linux中的Makefile错误
在linux中生成makefile时出错。这是我的密码:C linux中的Makefile错误,linux,makefile,Linux,Makefile,在linux中生成makefile时出错。这是我的密码: CC=gcc CFLAGS=-Wall-m32-g-fno堆栈保护器-z execstack-O0 SHELL_SOURCES=SHELL.c 外壳 .假冒:所有target1都是干净的 全部:target1 target1:$(壳牌) $(SHELL):$(SHELL\u来源) $(CC)$(CFLAGS)$^-o$@ 清洁: rm-rf$(壳牌) 我得到的错误是: gcc -Wall -m32 -g -fno-stack-prote
CC=gcc
CFLAGS=-Wall-m32-g-fno堆栈保护器-z execstack-O0
SHELL_SOURCES=SHELL.c
外壳
.假冒:所有target1都是干净的
全部:target1
target1:$(壳牌)
$(SHELL):$(SHELL\u来源)
$(CC)$(CFLAGS)$^-o$@
清洁:
rm-rf$(壳牌)
我得到的错误是:
gcc -Wall -m32 -g -fno-stack-protector -z execstack -O0 Shell.c -o Shell
make: Shell: Command not found
Makefile:16: recipe for target 'Shell' failed
make: *** [Shell] Error 127
花更多的时间阅读
应删除变量赋值(例如代码)周围的空格
CC= gcc
请注意,制表符在Makefile
-s中很重要(在中,用于其操作行)。使用一些意识到这一点的编辑器(例如,emacs
有一个模式用于)。另请参见示例(但规则操作实际上应该以制表符开头)。值得注意的是,在$(CC)$(CFLAGS)$^-o$@
前面需要一个选项卡,在rm
前面需要另一个选项卡
还可以考虑使用-x
调试Makefile
,或者至少使用make--trace
但是,主要的错误确实是使用了。使用tomake
时要小心。实际上,我有一个习惯,就是在我的make
变量名前面加上一个通用前缀,这样你就可以定义你的变量,比如JOJOIGA_SOURCES=$(通配符*.c)
,jojojoiga_SHELL=SHELL
等等……需要更多的时间来阅读
应删除变量赋值(例如代码)周围的空格
CC= gcc
请注意,制表符在Makefile
-s中很重要(在中,用于其操作行)。使用一些意识到这一点的编辑器(例如,emacs
有一个模式用于)。另请参见示例(但规则操作实际上应该以制表符开头)。值得注意的是,在$(CC)$(CFLAGS)$^-o$@
前面需要一个选项卡,在rm
前面需要另一个选项卡
还可以考虑使用-x
调试Makefile
,或者至少使用make--trace
但是,主要的错误确实是使用了。使用to
make
时要小心。实际上,我有一个习惯,就是在我的make
变量名前面加上一个公共前缀,这样你就可以定义你的变量,比如JOJOIGA_SOURCES=$(通配符*.c)
,jojojoiga_SHELL=SHELL
等等……你不能在Makefile中将SHELL
用作变量,它用来知道SHELL是什么(/bin/sh、/bin/bash等)将在Makefile中使用
CC = gcc
CFLAGS = -Wall -m32 -g -fno-stack-protector -z execstack -O0
EXE_SOURCES = Shell.c
EXE = Shell
.PHONY: all target1 clean
all: target1
target1: $(EXE)
$(EXE): $(EXE_SOURCES)
$(CC) $(CFLAGS) $^ -o $@
clean:
rm -rf $(EXE)
您不能将
SHELL
用作Makefile中的变量,它用于了解将在Makefile中使用哪个SHELL(/bin/sh、/bin/bash等)
CC = gcc
CFLAGS = -Wall -m32 -g -fno-stack-protector -z execstack -O0
EXE_SOURCES = Shell.c
EXE = Shell
.PHONY: all target1 clean
all: target1
target1: $(EXE)
$(EXE): $(EXE_SOURCES)
$(CC) $(CFLAGS) $^ -o $@
clean:
rm -rf $(EXE)
更准确地说,
$(SHELL)
用于运行规则中的每个操作行,并且由于运行第一个操作时SHELL
不存在,make
正在抱怨。更准确地说,$(SHELL)
用于运行规则中的每个操作行,由于运行第一个操作时,Shell
不存在,make
正在抱怨。是的,我的原始代码有选项卡。复制代码时遇到一些问题。无论如何,谢谢:)是的,我的原始代码有选项卡。。按原样复制代码时遇到了一些问题。无论如何,谢谢你:)