cc命令无法创建对象文件

cc命令无法创建对象文件,c,makefile,C,Makefile,我正在尝试创建一个运行基本Hello World文件的makefile,如下所示: #include <stdio.h> int main() { printf("Hello World"); return 0; } 我不断收到一个错误,无法运行cc-Wall-g-c-o helloworld.o helloworld.c。我看了另一个堆栈溢出,它说cc可能没有安装?但是我知道cc只是c编译器,但是我通常使用gcc(cc是的别名)来编译没有ma

我正在尝试创建一个运行基本Hello World文件的makefile,如下所示:

#include <stdio.h>

int main() {
    printf("Hello World");
    return 0;
}
我不断收到一个错误,无法运行cc-Wall-g-c-o helloworld.o helloworld.c。我看了另一个堆栈溢出,它说cc可能没有安装?但是我知道cc只是c编译器,但是我通常使用gcc(cc是的别名)来编译没有makefile的文件,但是即使我在makefile中使用gcc,我仍然会得到一个错误。以下是整个错误:

C:\test>make -f makefile.mk
cc -Wall -g   -c -o helloworld.o helloworld.c
process_begin: CreateProcess(NULL, cc -Wall -g -c -o helloworld.o helloworld.c, ...) failed.
make (e=2): The system cannot find the file specified.
make: *** [helloworld1.o] Error 2

任何帮助都很好。

您正在使用make为您提供的内置规则,将C源文件编译为对象文件。您可以这样说,因为您没有编写任何规则告诉make如何编译对象文件(您有一条规则告诉make如何将已构建的对象文件链接到可执行文件),所以您知道,既然make找到了一条规则,它就在使用它的一条内置规则

内置规则使用内置变量来控制它们。在GNU make手册中描述了

如果检查内置变量列表,您将看到C编译器的名称由GNU make中的
CC
变量控制(请记住,makefile与几乎所有基于POSIX的工具一样,
make
绝对是,区分大小写的!!变量
cc
cc
的变量肯定是不同的,就像变量
foo
bar
的变量一样)

因此,将其添加到makefile中,希望它能正常工作:

CC = gcc
像这样编写makefile:

CC = gcc
CFLAGS = -Wall -g

helloworld: helloworld.o
        $(CC) -o helloworld helloworld.o

clean:
        rm helloworld helloworld.o

你在Windows上。你安装了编译器吗?它没有随附。其中有些有用吗?是的,我安装了gcc@MarkTolonen,那么它在路径环境中吗?你能从命令提示符下运行
cc
gcc
吗?是的,我可以运行gcc,但cc在@MarkTolonen下似乎不起作用。我也尝试过在mak中运行cc=gcc但这似乎也不能解决问题。我以前试过。当你说“不起作用”时,它们都不起作用,您的意思是即使您更改了变量,make仍然在编译行中打印命令
cc
?还是说它在编译行中打印了
gcc
,但仍然失败,并且出现了与找不到指定文件相同的错误?仍然在命令行中打印cc几乎相同的错误@madscietrict@RichardDesouza您知道
CC
必须是大写吗?
CC = gcc
CFLAGS = -Wall -g

helloworld: helloworld.o
        $(CC) -o helloworld helloworld.o

clean:
        rm helloworld helloworld.o