Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C makefile的问题_C_Makefile - Fatal编程技术网

C makefile的问题

C makefile的问题,c,makefile,C,Makefile,hiii,我刚开始研究makefiles,并为一个简单的hello.c文件编写了下面的一个。它显示了一些错误,如: makefile1:5:**缺少分隔符。停下来 这里怎么了 CC=gcc CFLAGS=-c -Wall hello: hello.c $(CC) $(CFLAGS) hello.c -o hello clean: rm -rf *.o 而且,使用makefile总是一个更好的选择,还是在某些特定情况下不使用它们 如果我哪里错了,请

hiii,我刚开始研究makefiles,并为一个简单的hello.c文件编写了下面的一个。它显示了一些错误,如:

makefile1:5:**缺少分隔符。停下来

这里怎么了

 CC=gcc
    CFLAGS=-c -Wall

    hello: hello.c
    $(CC) $(CFLAGS) hello.c -o hello

    clean:
     rm -rf *.o
而且,使用makefile总是一个更好的选择,还是在某些特定情况下不使用它们


如果我哪里错了,请纠正我

在编写生成目标的规则之前,请确保没有缺少任何选项卡:

CC=gcc
CFLAGS=-c -Wall

hello: hello.c
<TAB>$(CC) $(CFLAGS) hello.c -o hello

.PHONY: clean
clean:
<TAB>rm -rf *.o
CC=gcc
CFLAGS=-c-墙
你好,c
$(CC)$(CFLAGS)你好.c-o你好
.假冒:干净
清洁:
rm-rf*.o

.PHONY
很好。您可以找到原因。

首先,您的目标不应缩进。其次,确保缩进时使用的是制表符而不是空格

CC=gcc
CFLAGS=-c -Wall
.PHONY: clean # There's no clean file.
hello: hello.c
    $(CC) $(CFLAGS) hello.c -o hello
clean:
    rm -rf *.o
至于你的另一个问题,makefile到处都在使用。不管你喜欢与否,学习如何维护它们都是一个好主意。就我个人而言,我喜欢它们的魔力。他们可以节省很多时间。如果您发现自己必须调试复杂的分隔符,它们也可能是可怕的时间消耗。

缺少分隔符意味着您可能没有在CC或rm行中使用制表符。尝试按如下方式重新格式化文件

CC=gcc
CFLAGS=-c -Wall

hello: hello.c
<TAB>$(CC) $(CFLAGS) hello.c -o hello

clean:
<TAB>rm -rf *.o
CC=gcc
CFLAGS=-c-墙
你好,c
$(CC)$(CFLAGS)你好.c-o你好
清洁:
rm-rf*.o

Make很挑剔,因为所有命令行都必须以制表符开头。不是4个空格,不是8个空格,而是一个实际的选项卡(ASCII 0x09)

除了缩进问题,您应该从CFLAGS中删除
-c
,否则生成的hello将不是可执行文件,而是一个没有正确名称的.o文件。

现在它说。。。“没有规则使目标hello.c成为hello所需”。。。。这是什么意思?看起来目录中没有名为
hello.c
的文件。它已编译。。它向我显示“$(CC)$(CFLAGS)hello.c-o hello”。。。但是当我试图编译suing./你好,它没有…知道为什么问题是…?
/hello
没有编译..它运行。当你做
/hello
,你得到了什么?我得到了bash:/hello:权限被拒绝。。。我想说的是“跑”这个词。。即使我是超级用户,这种情况也会发生……顺便说一句,make对许多文件类型都有隐式规则,因此您只需编写
hello:hello.c
,而无需使用命令编写下一行
CC
CFLAGS
将由隐式规则使用。