【发布时间】:2015-10-17 03:45:31
【问题描述】:
我有一个编译 src 文件夹中所有 cpp 文件的 makefile。所有的 cpp 文件都依赖于它们的 .h 文件。所以我有一个规则来做所有这些(我认为)。
但我想从源文件列表中删除 main.cpp,因为它没有相应的头文件。
我有从 cpp 文件列表中删除 main 的代码。然后我写了一个单独的规则来编译main。我认为这是我出错的地方。
这是生成文件和错误。
CC := g++
CFLAGS := -g -O2
BIN_DIR := bin
BUILD_DIR := build
SRC_DIR := src
TARGET := wavfiletool.exe
MAIN := WavFileTool
SOURCES := $(wildcard src/*.cpp)
SOURCES := $(filter-out src/$(MAIN).cpp, $(SOURCES))
OBJECTS := $(SOURCES:$(SRC_DIR)/%.cpp=$(BUILD_DIR)/%.o)
$(BIN_DIR)/$(TARGET): $(MAIN).o $(OBJECTS)
$(CC) $(OBJECTS) $(CFLAGS) -o $@
$(MAIN).o: $(MAIN).cpp
$(CC) $(CFLAGS) -c $(MAIN).cpp -o $(MAIN).o
$(OBJECTS): $(BUILD_DIR)/%.o : $(SRC_DIR)/%.cpp : $(SRC_DIR)/%.h
@$(CC) $(CFLAGS) -c $< -o $@
错误:
make: Circular WavFileTool <- WavFileTool dependency dropped.
编辑:当我从目标行中删除 $(MAIN).o 依赖项时,错误消失了。
【问题讨论】:
-
最后一条规则甚至不应该起作用,那额外的
:在那里做什么? -
我认为该规则会使对象依赖于 cpp 而 cpp 依赖于 .h :S
-
我在您显示的代码中没有看到任何循环依赖。
-
那个makefile肯定会给出那个错误信息。