在使用 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 定义了一个隐式规则,其中依赖是在正确的方向上定义的。
我试图为一个使用 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 定义了一个隐式规则,其中依赖是在正确的方向上定义的。