C Makefile,";没有什么可以为所有人做的”;错误

C Makefile,";没有什么可以为所有人做的”;错误,c,gcc,compilation,makefile,C,Gcc,Compilation,Makefile,因此,我有一个make文件,存储在一个名为“temp”的目录中。下面的目录有一个src文件夹,其中包含2.c文件“file1.c”和“file2.c”。temp目录还包含一个include文件夹(为空)和一个bin文件夹(在make命令运行之前为空)。我目前正在尝试编译一个.c文件(让它工作),但是一个文件在这里似乎都不工作 以下是目录的外观: temp 将cd转换成temp bin include Makefile src 这是我的makefile: all: gcc -Wall

因此,我有一个make文件,存储在一个名为“temp”的目录中。下面的目录有一个src文件夹,其中包含2.c文件“file1.c”和“file2.c”。temp目录还包含一个include文件夹(为空)和一个bin文件夹(在make命令运行之前为空)。我目前正在尝试编译一个.c文件(让它工作),但是一个文件在这里似乎都不工作

以下是目录的外观:

temp
将cd转换成temp

bin include Makefile src
这是我的makefile:

all:
    gcc -Wall -pedantic -std=c99 src/file1.c -Iinclude -o bin/runMe -lncurses

是的,gcc前面有一个选项卡。如果能在这个令人沮丧的问题上提供任何帮助,我们将不胜感激。此外,如果可能的话,任何关于编译第二个.c文件的输入都将非常有用

无需对目标执行任何操作
表示目标没有命令,在本例中,这几乎肯定意味着您在该
gcc
行上没有选项卡

尽管如此,这只是眼前的问题。此makefile也没有遵循良好的实践,将不必要地重新编译您的程序(如果创建了
all
文件,则会完全停止工作)

在当前删除的答案中,DrC对如何改进makefile以避免后两个问题提出了非常好的建议

具体而言,您的makefile应该更像这样:

.PHONY: all
all: bin/runMe

bin/runMe: src/file1.c
     gcc -Wall -pedantic -std=c99 $^ -Iinclude -o $@ -lncurses

它将
all
目标标记为,以便创建的
all
文件或目录不会混淆make,并在源文件上为构建的二进制文件设置一个先决条件,以便make可以判断何时创建(或不创建)需要重新生成二进制文件。

无需执行任何操作都不是错误-这意味着自上次编译以来,没有任何新内容需要编译。请在gcc之前再次检查此“选项卡”(使用显示空白的编辑器)您确定编辑器没有将制表符转换为空格吗?请进行检查,以便在
~/.nanorc
文件中不设置以下内容:
设置制表符空格
DrC:取消删除您的答案。Etan:若并没有制表符,那个么在解析过程中就会丢失分隔符。这个makefile在语法上是合法的,这意味着在
gcc
@madscitist之前绝对有一个选项卡,您完全正确。这使得我无法解释最初的输出(除非我认为它不是GNU Make)。