Makefile循环依赖错误
Makefile circular dependency error
我有一个编译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)。
循环依赖关系是由WavFileTool
后面的伪空格引起的,这导致$(BIN_DIR)/$(TARGET)
的目标看起来像这样
bin/WavFileTool.exe: WavFileTool .o (other .o files)
在下一个规则中,由于同样的问题,WavFileTool
最终取决于自身:
WavFileTool .o: WavFileTool .cpp
摆脱空间是不够的,但是,因为你在最后有一个无效的静态规则(你不能像这样"链"目标),并且因为你没有正确指定$(MAIN).o
的路径。
与其修复您的makefile,不如使用一个更标准的解决方案来生成它自己的依赖项:
BIN_DIR := bin
BUILD_DIR := build
SRC_DIR := src
TARGET := WavFileTool.exe
CC := g++
CPPFLAGS := -MMD -MP
CXXFLAGS := -g -O2
SOURCES := $(wildcard $(SRC_DIR)/*.cpp)
OBJECTS := $(SOURCES:$(SRC_DIR)/%.cpp=$(BUILD_DIR)/%.o)
DEPS := $(wildcard $(BUILD_DIR)/*.d)
RM = -del $(subst /,,$1)
.PHONY: clean
$(BIN_DIR)/$(TARGET): $(OBJECTS)
$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
$(OBJECTS): $(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(OUTPUT_OPTION) $<
clean: ; $(call RM, $(DEPS) $(OBJECTS))
include $(DEPS)
$(MAKEFILE_LIST): ;
%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%
include
之后的最后一部分禁用了重新制作makefiles和其他一些隐式规则,这在使用-d
调试make文件时非常有用,否则您必须费力地完成许多不必要的输出。
相关文章:
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 当 lib 已添加到其他依赖项时,如何在 VS 中调试未解析的外部符号错误
- 更新 Visual Studio 2017,现在出现编译错误 C7510:"回调":使用依赖模板名称必须以 'template' 为前缀
- 错误 C2512 视觉C++(并且不是循环依赖项)
- 依赖于模板的错误
- 错误 LNK1104:错误消息中显示的路径未在其他依赖项中定义
- 循环依赖结构,使用前向声明时结构的错误重定义
- 如何修复"没有依赖于模板参数的参数'glGenVertexArrays'......"C++ 中的错误
- ITK 库依赖项错误
- 暗流安装视觉工作室依赖项错误
- C++为 Android 构建的库使用了错误的依赖项符号
- C++ 生成文件不编译依赖项/链接错误?
- C++ 上的循环依赖和继承编译错误
- OpenACC 嵌套循环依赖关系错误
- 这是 MSVC 中依赖名称解析中的错误吗?
- 在默认参数中使用依赖范围作为 std::less 的类型时出现编译错误
- 访问类引用信息的 C++ "Incomplete type not allowed"错误(具有前向声明的循环依赖项)
- Windows上的CMake-zlib依赖关系错误
- C++ 错误:"没有依赖于模板参数的'setw'参数
- 如何检查给定文件是否存在依赖项错误