gpt4 book ai didi

c - Makefile 不创建可执行文件

转载 作者:行者123 更新时间:2023-11-30 16:20:45 24 4
gpt4 key购买 nike

所以我一直在搜索堆栈溢出和互联网的其余部分,虽然我发现了与我类似的问题,但我还没有找到适合我的问题的答案。我刚刚学习如何创建 makefile,希望得到任何帮助。我首先创建了一个带有变量“object”的 makefile,当我输入 make 时,它​​会编译 .c 文件,创建 .o 文件,但是,没有生成可执行文件。这就是我的 makefile 的样子:

objects = user_interface.o interacts.o linked_list_funcs.o

proj4ex: $(objects)
<tab> cc -o proj4ex $(objects)
user_interface.o: user_interface.c header.h
<tab> cc -c user_interface.c
interacts.o: interacts.c header.h
<tab> cc -c interacts.c
linked_list_funcs.o: linked_list_funcs.c header.h
<tab> cc -c linked_list_funcs.c
clean:
<tab> rm proj4ex $(objects)

然后我尝试将我的 makefile 更改为完全相同的内容,但使用文件名而不是变量“object”。当使用 make 与我的 makefile 的这种新形式时,它似乎可以编译,但我收到有关我的代码的错误。我不确定我是否误解了该错误,但我相信这意味着我的变量“debugMode”被声明了几次,但事实并非如此。这是我使用列出文件名的 makefile 时得到的结果

enter image description here

我想知道我原来的 makefile 是否没有正确读取其他文件?只是很困惑,希望得到任何帮助,谢谢!

最佳答案

就像 Joseph 所说,编译器告诉您您多次定义了“debugMode”标识符。您可以看出,因为它引用了 .bss 部分,该部分与二进制文件有关,而不是与 make 有关。此外,链接器 ld 显然是该步骤中失败的原因,这是有道理的,因为链接器错误。

话虽这么说,我将为您的 makefile 提出以下建议。在内部,Make已经知道如何编译c文件,它看起来像这样:

%.o: %.c
$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -o $@ $^

该配方将从 c 文件构建所有必需的目标文件,但同样,Make 已经知道这一点。如果您打算一路写出菜谱,那应该是因为您要添加项目所需的额外内容。您希望将编译器指定为 $(CC),以便当您的用户编译项目时,他们可以指定自己选择的编译器,如下所示:make CC=icc 或其他。

强调要点,问题出在您的代码中,而不是 makefile。

关于c - Makefile 不创建可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55192904/

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