首页 > 解决方案 > 如何解决 GNU make 产生“循环 main.c”错误

问题描述

//makefile.conf

.SUFFIXES : .c .o

cc = gcc
CFLAG = -c
OFLAG = -o
O2FLAG = -O2
WPIFLAG = -lwringPi
RM = rm -rf

TARGET_SRCS = main.c
TARGET_OBJS = $(TARGET_SRCS:$.c=$.o)
TARGET_NAMES = $(TARGET_SRCS:$.c=$)
BINARY_NAME = LED_TEST

// 生成文件

include makefile.conf

$(TARGET_OBJS) : $(TARGET_SRCS)
        $(CC) $(O2FLAG) $(CFLAG) $(OFLAG) $^

我试图弄清楚 gnu make 如何工作以及如何使用它。然而,我是一个初学者。

我正在尝试在我的作业中使用make(不是强制性的,只是我的热情)来运行简单的代码,该代码通过使用wiringpi来点亮LED。

实际上只有一个 main.c,而我想做的是运行的 makefile

gcc -O2 -c -o main.o main.c

gcc -o main main.o -lwiringPi

由于我的最后一个代码不起作用,(不断循环 main.c <- main.c 依赖项丢弃错误)

我试图制作一个只运行的代码

gcc -O2 -c -o main.o main.c

但我仍然收到循环 main.c 错误,我不知道这意味着什么。

我试图查找 gnu make 手册,但我想通了,这将需要我的生命来理解。

所以我试图查看代码并用我看到的内容制作一个。

我想我了解makefile.conf的概念,但仍然不了解.SUFFIXES的功能。

我理解为注意到 make 我将使用 .c 和 .o 制定规则,然后在 makefile.conf 中的代码定义了将在 makefile 中使用的变量。

如何更正代码?当实际的“分配”只用了五分钟,包括添加评论。

标签: clinuxgccmakefile

解决方案


第一个生成文件:

main:
    gcc -O2 -c -o main.o main.c
    gcc -o main main.o -lwiringPi

当它完美运行时,第二个makefile:

main: main.o
    gcc -o main main.o -lwiringPi

main.o: main.c
    gcc -O2 -c -o main.o main.c

当它完美运行时,第三个makefile:

main: main.o
    gcc -o $@ $^ -lwiringPi

main.o: main.c
    gcc -O2 -c -o $@ $<

当它完美运行时,您将为更高级的技术做好准备。


推荐阅读