在使用 g++ 和 gcc 编译 obj 文件的 Makefile 中,如何避免循环依赖?

How can I avoid circular dependency in my Makefile compiling obj file with g++ and gcc?

我试图为一个使用 c++ 和 c 的项目创建一个 makefile。 我需要编译这些文件以生成 de.o 文件,但是当我使用 make 编译时,我有循环依赖被删除了。

我不知道为什么会出现此错误,因为我试图将来自 .c 的 .o 文件的构建与来自 .cpp 文件的 .o 文件的构建分开。

这是我的 makefile :

SRC = $(wildcard *.c)
SRC++ = $(wildcard *.cpp)
OBJ = $(SRC++:.cpp=.o) $(SRC:.c=.o)
DEP = $(SRC:.c=.d) $(SRC++:.cpp=.d)

CC=gcc
CXX=g++

CFLAGS = -Wall
CXXFLAGS = -Wall

all: $(OBJ)

%.c : %.o
    $(CC) -c $(CFLAGS) $< -o $@  

%.cpp : %.o
    $(CXX) -c $(CXXFLAGS) $< -o $@  

# Clean the project
clean:
    @rm -f $(OBJ) $(DEP)

-include $(DEP)

你知道我做错了什么吗?

您写的规则是%.cpp : %.o%.c : %.o。您以错误的方式编写了这些规则。正在构建的目标必须在冒号的左边,它所依赖的东西必须在右边。

错误消息告诉您循环依赖是因为 GNU Make 定义了一个隐式规则,其中依赖是在正确的方向上定义的。