gpt4 book ai didi

c - GCC 上的 Makefile for C

转载 作者:太空宇宙 更新时间:2023-11-04 08:11:29 26 4
gpt4 key购买 nike

我正在使用 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>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>

最佳答案

I'm using MinGW and trying to create a justify executable using the Makefile

不,你不是。制作命令:

C:\Users\PATTY\Desktop\loops>mingw32-make justify

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

在这种情况下,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)

您的PATH 中没有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

在你的PATH这样的程序gcc,就是你的C编译器。这更好,但内置配方现在扩展为:

gcc     justify.c   -o justify

它试图编译和链接你的程序justify源文件 justify.c。而作为 you know ,在此目录中构建此程序所需的配方是:

gcc -o justify justify.c line.c word.c

所以您现在运行的配方因您观察到的链接错误而失败,因为您没有编译或链接缺少函数的源文件定义。

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

mingw32-make -f whatever.mak ...

Here is a fairly sound beginner's tutorial for using GCC with GNU make .如需权威文档,here is the GCC manualhere is the GNU Make manual

关于c - GCC 上的 Makefile for C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39044407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com