在GCC上为C生成文件

在GCC上为C生成文件,c,gcc,makefile,C,Gcc,Makefile,我正在使用MinGW并试图使用Makefile创建一个justify可执行文件,但它给了我以下错误: Directory of C:\Users\PATTY\Desktop\loops 08/19/2016 01:34 PM <DIR> . 08/19/2016 01:34 PM <DIR> .. 08/18/2016 10:41 PM 59,628 a.exe 08/18/2016 11:

我正在使用MinGW并试图使用Makefile创建一个justify可执行文件,但它给了我以下错误:

 Directory of C:\Users\PATTY\Desktop\loops

08/19/2016  01:34 PM    <DIR>          .
08/19/2016  01:34 PM    <DIR>          ..
08/18/2016  10:41 PM            59,628 a.exe
08/18/2016  11:58 PM               261 demo.c
08/18/2016  11:59 PM            59,541 demo.exe
08/18/2016  07:01 PM               605 justify.c
08/18/2016  07:01 PM             1,122 line.c
08/18/2016  07:02 PM               197 line.h
08/19/2016  01:03 AM               350 newquote.txt
08/18/2016  11:05 PM               628 planets.c
08/18/2016  11:14 PM            60,139 planets.exe
07/15/2016  08:03 PM                89 pun.c
08/19/2016  12:55 AM               412 quote.txt
08/13/2016  05:32 PM               167 reverse.c
08/18/2016  10:45 PM            28,107 reverse.exe
08/18/2016  10:45 PM               708 reverse.o
08/19/2016  03:14 AM               459 something.txt
08/11/2016  11:14 PM             1,698 test.c
08/18/2016  07:01 PM               427 word.c
08/18/2016  07:02 PM                92 word.h
              18 File(s)        214,630 bytes
               2 Dir(s)  164,884,508,672 bytes free

C:\Users\PATTY\Desktop\loops>mingw32-make justify
cc     justify.c   -o justify
process_begin: CreateProcess(NULL, cc justify.c -o justify, ...) failed.
make (e=2): The system cannot find the file specified.
<builtin>: recipe for target 'justify' failed
mingw32-make: *** [justify] Error 2

C:\Users\PATTY\Desktop\loops>
C:\Users\PATTY\Desktop\loops目录
2016年8月19日下午1:34。
2016年8月19日下午1:34。。
2016年8月18日晚上10:41 59628 a.exe
2016年8月18日晚上11:58 261 demo.c
2016年8月18日晚上11:59 59541 demo.exe
2016年8月18日07:01 PM 605.c
2016年8月18日07:01 PM 1122 line.c
2016年8月18日07:02 PM 197 line.h
2016年8月19日01:03 AM 350 newquote.txt
2016年8月18日晚上11:05 628.c
2016年8月18日晚上11:14 60139 planets.exe
2016年7月15日08:03 PM 89双关语
2016年8月19日12:55 AM 412 quote.txt
2016年8月13日05:32下午167点c
2016年8月18日晚上10:45 28107 reverse.exe
2016年8月18日晚上10:45 708倒档
2016年8月19日03:14 AM 459 something.txt
2016年11月8日晚上11:14 1698测试c
2016年8月18日07:01 PM 427 word.c
2016年8月18日07:02 PM 92 word.h
18个文件214630字节
2个目录164884508672字节可用
C:\Users\PATTY\Desktop\loops>mingw32 make-justify
cc-justify.c-o-justify
进程\u开始:CreateProcess(NULL,cc justify.c-o justify,…)失败。
make(e=2):系统找不到指定的文件。
:目标“justify”的配方失败
mingw32 make:**[justify]错误2
C:\Users\PATTY\Desktop\loops>
我是一个初学者,所以请让我知道我错过了什么或做错了什么

编辑:

另一次失败的尝试:

C:\Users\PATTY\Desktop\loops>mingw32-make justify CC=gcc
gcc     justify.c   -o justify
C:\Users\PATTY\AppData\Local\Temp\cc2z2lvl.o:justify.c:(.text+0x10): undefined reference to `clear_line'
C:\Users\PATTY\AppData\Local\Temp\cc2z2lvl.o:justify.c:(.text+0x24): undefined reference to `read_word'
C:\Users\PATTY\AppData\Local\Temp\cc2z2lvl.o:justify.c:(.text+0x40): undefined reference to `flush_line'
C:\Users\PATTY\AppData\Local\Temp\cc2z2lvl.o:justify.c:(.text+0x5f): undefined reference to `space_remainding'
C:\Users\PATTY\AppData\Local\Temp\cc2z2lvl.o:justify.c:(.text+0x68): undefined reference to `write_line'
C:\Users\PATTY\AppData\Local\Temp\cc2z2lvl.o:justify.c:(.text+0x6d): undefined reference to `clear_line'
C:\Users\PATTY\AppData\Local\Temp\cc2z2lvl.o:justify.c:(.text+0x79): undefined reference to `add_word'
collect2.exe: error: ld returned 1 exit status
<builtin>: recipe for target 'justify' failed
mingw32-make: *** [justify] Error 1

C:\Users\PATTY\Desktop\loops>
C:\Users\PATTY\Desktop\loops>mingw32-make-justify-CC=gcc
gcc-justify.c-o-justify
C:\Users\PATTY\AppData\Local\Temp\cc2z2lvl.o:justify.C:(.text+0x10):未定义对“clear\u line”的引用
C:\Users\PATTY\AppData\Local\Temp\cc2z2lvl.o:justify.C:(.text+0x24):对“read\u word”的未定义引用
C:\Users\PATTY\AppData\Local\Temp\cc2z2lvl.o:justify.C:(.text+0x40):未定义对“flush\u line”的引用
C:\Users\PATTY\AppData\Local\Temp\cc2z2lvl.o:justify.C:(.text+0x5f):未定义对“space\u remaining”的引用
C:\Users\PATTY\AppData\Local\Temp\cc2z2lvl.o:justify.C:(.text+0x68):未定义对“write\u line”的引用
C:\Users\PATTY\AppData\Local\Temp\cc2z2lvl.o:justify.C:(.text+0x6d):未定义对“clear\u line”的引用
C:\Users\PATTY\AppData\Local\Temp\cc2z2lvl.o:justify.C:(.text+0x79):对“添加单词”的未定义引用
collect2.exe:错误:ld返回了1个退出状态
:目标“justify”的配方失败
mingw32 make:**[justify]错误1
C:\Users\PATTY\Desktop\loops>
我正在使用MinGW并尝试使用Makefile创建一个justify可执行文件

不,你不是。make命令:

C:\Users\PATTY\Desktop\loops>mingw32-make justify
不指定任何makefile。在这种情况下,默认情况下,
make
对于工作目录中的
makefile
,如果失败,将查找
Makefile
在工作目录中。但是
C:\Users\PATTY\Desktop\loops的目录列表
显示这些生成文件也不存在

在这种情况下,
make
会返回其内置的规则数据库来查看 如果它们中的任何一个允许它从该文件构建目标
justify
存在于工作目录中,没有任何指定的或默认的makefile

它会找到此内置规则:

%: %.c
    $(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@
它将尝试从单个 匹配的C源文件
%.C

此规则与目标
justify
和源文件
justify.c
匹配。那 源文件存在于工作目录中,因此
make
尝试配方:

    $(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@
先决条件是
$^
=
justify.c
和目标
$@
=
justify

但它不起作用,因为变量完全展开后,配方变成:

cc     justify.c   -o justify
其中,
cc
是make变量
cc
的默认值,表示C编译器。 这是因为
$(LINK.c)
定义为:

LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
您的
路径中没有
cc
这样的程序,因此配方失败:

process_begin: CreateProcess(NULL, cc justify.c -o justify, ...) failed.
make (e=2): The system cannot find the file specified.
您意识到这是问题的本质,并尝试:

C:\Users\PATTY\Desktop\loops>mingw32-make justify CC=gcc
在您的
路径中有一个类似于
gcc
的程序,它是您的C编译器。 这更好,但内置配方现在扩展到:

gcc     justify.c   -o justify
它试图编译并链接您的程序
justify
源文件
justify.c
。作为, 在此目录中构建此程序所需的配方为:

gcc -o justify justify.c line.c word.c
因此,您现在运行的配方失败,出现了您观察到的链接错误,因为 您没有编译或链接包含丢失函数的源文件 定义

如果您想使用
make
正确构建程序,您需要学习 编写makefile的要点,然后编写一个指示
make
构建的文件 程序运行正确。您可以将此生成文件保存在
C:\Users\PATTY\Desktop\loops
默认情况下,
makefile
makefile
make
将使用它。或者你可以 可以随意调用它,并在调用
make
时使用
-f
选项按名称指定它:

mingw32-make -f whatever.mak ...
。 获取权威文件,以及

我正在使用MinGW并尝试使用Makefile创建一个justify可执行文件

不,你不是。make命令:

C:\Users\PATTY\Desktop\loops>mingw32-make justify
不指定任何makefile。在这种情况下,默认情况下,
make
对于工作目录中的
makefile
,如果失败,将查找
Makefile
在工作目录中。但是
C:\Users\PATTY\Desktop\loops的目录列表
显示这些生成文件也不存在

在这种情况下,
make
会返回其内置的规则数据库来查看 如果有