- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我创建了一个基于 GNU Make 教程的 makefile:https://www.gnu.org/savannah-checkouts/gnu/make/manual/html_node/index.html#SEC_Contents .
make 文件在初始 make 时工作正常,但如果文件更改并运行 make,则会出现循环依赖项删除消息,并且它不会构建更改后的文件。删除的依赖项是 bin/main.o <-bin/main.o。这是有道理的,因为 main.o 不应该依赖于 main.o。我搜索了几个站点,包括 stackoverflow 并找到了一些有用的答案,但我无法解决我的问题。这两个链接与我的问题最相关: Makefile export .o file to a different path than .cpp和 Makefile circular dependency error
根据以上信息,我编辑了我的 makefile,至少现在我可以更轻松地调试了。依赖问题可能与通配符扩展后的后续目标和先决条件有关,但我只是没有看到它。
这是我的生成文件:
#For compilation
CC=g++
CC_FLAGS= -g -Wall -Werror -ansi -pedantic
#make[1]: main.o all <- all
#Folder structure
BIN_DIR:=bin
SRC_DIR:=src
H_DIR:=src/header
all:rshell
#VPATH = $(SRC_DIR)
H_FILES:=$(wildcard $(H_DIR)/*.h)
DEPS:$(wildcard $(BIN_DIR)/*.d)
CPP_FILES:=$(wildcard $(SRC_DIR)/*.cpp)
OBJECTS := $(CPP_FILES:$(SRC_DIR)/%.cpp=$(BIN_DIR)/%.o)
$(BIN_DIR)/%.o: $(SRC_DIR)/%.cpp $(H_DIR)/%.h
mkdir -p $(BIN_DIR)
$(CC) -I$(H_DIR) -o $@ -c $< $(CC_FLAGS)
$(BIN_DIR)/main.o:$(SRC_DIR)/main.cpp $(OBJECTS) $(H_FILES)
$(CC) -I$(H_DIR) -o $@ -c $(SRC_DIR)/main.cpp $(CC_FLAGS)
rshell: $(OBJECTS)
$(CC) -o $(BIN_DIR)/$@ $(OBJECTS) $(CC_FLAGS)
include $(DEPS)
$(MAKEFILE_LIST): ;
%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%
.PHONY: clean
clean:
rm -rf $(BIN_DIR)
问题 1:如果通配符扩展导致循环依赖,我该如何解决?
问题2:如何跟踪通配符扩展?回显文件名并以这种方式进行跟踪是否正确?运行 make -d 很有用,但我不知道如何避免它。我的假设是这些行导致循环依赖:
$(BIN_DIR)/main.o:$(SRC_DIR)/main.cpp $(OBJECTS) $(H_FILES)
$(CC) -I$(H_DIR) -o $@ -c $(SRC_DIR)/main.cpp $(CC_FLAGS)
感谢您的帮助和见解。
最佳答案
$(BIN_DIR)/main.o:$(SRC_DIR)/main.cpp $(OBJECTS) $(H_FILES)
这一行你说要构建 main.o ,我需要 main.cpp *.h 和 *.o
但是 *.o 有 main.o 所以你写 main.o 依赖于 main.o。只需删除 $(OBJECTS) 你不需要对象来构建对象。
$(BIN_DIR)/main.o:$(SRC_DIR)/main.cpp $(H_FILES)
不要使用通配符,最好明确显示您的源文件。 c++编译器不要使用CC,标准使用CXX。
Makefile 示例:
NAME = foo
CXX ?= g++
RM = rm
DEBUG ?= no
LEVEL ?= 3
LIB = -l m
INCLUDE = -I include
CXXFLAGS += -Wall -Wextra -O$(LEVEL)
CXXFLAGS += -ansi -pedantic -std=c++11
CXXFLAGS += $(INCLUDE)
ifeq ($(CXX), clang++)
CXXFLAGS += -Weverything
endif
ifneq ($(DEBUG), no)
CXXFLAGS += -g
endif
LDFLAGS = $(LIB)
ifeq ($(DEBUG), no)
LDFLAGS += -s
endif
SRC = main.cpp
SRC += foo.cpp
DPD = $(SRC:.cpp=.dpd)
OBJ = $(SRC:.cpp=.o)
all : $(NAME)
$(NAME) : $(OBJ)
$(CXX) $(OBJ) -o $(NAME) $(LDFLAGS)
clean :
$(RM) -f $(OBJ)
$(RM) -f $(DPD)
fclean : clean
$(RM) -f $(NAME)
re : fclean
$(MAKE) -C .
%.dpd : %.cpp
$(CXX) -MM $(<) -o $(@) $(CXXFLAGS) -MT $(<:.cpp=.o)
%.o : %.cpp
$(CXX) -c $(<) -o $(@) $(CXXFLAGS)
.PHONY : all clean fclean re %.dpd %.o
.SUFFIXES : .o.cpp .dpd.cpp
include $(DPD)
关于c++ - 制作 : circular dependency dropped c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40697867/
如果我有一个包含 debian/control 和 Build-Depends 条目的 Depends 文件。 如何安装两组依赖项? 目前我正在使用以下命令创建一个依赖于 Build-Depends
我一直在查看衬底节点模板的Cargo.toml文件,并注意到,对于大多数 crate 而言,其依赖性如下所示: [dependencies.grandpa] package = 'sc-finalit
我在 Netbeans 7.1 IDE 中有一个 Maven 项目。 我想为 Dependencies 添加相同的依赖项和 Test Dependencies . 添加到一个中会将其从另一个中删除。
我正在尝试解决此处描述的问题: http://www.jayway.com/2013/04/12/solving-asm-conflicts-after-upgrading-to-groovy-2-1
我研究过这个问题,但找不到共识。如果“A 依赖于 B”,术语“依赖性”指的是: 一个 B A和B的关系 这个术语在计算机技术的不同子领域中是否有不同的含义? 最佳答案 B 将是依赖项。您可能会以“B
WebLogic 10.3.6Java 1.6 所以我在使用 Eclipse 时遇到了 XML 问题。 7天前我去度假之前,这一切运行良好。事实上,在我离开之前,我恢复到了旧版本,因为我在一些不太重要
在问这个问题之前,我想说 this stackoverflow 中的问题与我的问题非常相似,但概念仍然不清楚,非常困惑。 我想了解依赖倒置原则,但我无法完全理解它? 下面是DIP说的两点 A. Hig
很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .
我正在尝试使用 apache maven 创建一个包。当我运行 mvn clean install 命令时,出现以下错误: dependencies.dependency.version' is mi
在 Real World Ocaml Chapter 9这是关于仿函数的: Dependency injection Makes the implementations of some compone
我已经构建了类似用于创建网站的基本模板/工作流的东西,主要使用 Grunt。 该模板的一部分是 Modernizr 特征检测库,我的一项 Grunt 任务依赖于它。 目前我只是将该依赖项存储在我的 b
我有固定依赖项的 python 项目。由于第三方依赖项中的错误,在我的包中发现了错误。该依赖项已发布修复该错误的补丁。然而,根据 semantic versioning ,是否为固定依赖项的每个补丁版
使用插件io.spring.dependency-management ,我的依赖的一些版本是从其他依赖中扣除的 id("io.spring.dependency-management") versi
我有这两个表“员工表,从属表” 员工表有“ID, employee_id, employee_name” 从属表有“ID, employee_id, dependent_name, relations
我正在使用 Eclipse 中的一个 mavenised java 项目,其中有几个模块无法构建并从 pom 文件中抛出错误: Project build error: 'dependencies.d
我有一个包含多个模块的 maven 项目。在 Eclipse(Juno,带有 m2e)中,它似乎编译得很好。但是当我在其中一个模块上进行 maven 安装时,构建会立即失败。 父 pom: com
我使用 eclipse juno 创建了一个 maven 项目并编辑了 pom 文件。当我通过“mvn clean install”使用命令提示符运行 pom 文件时,出现此错误。 [ERROR] T
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 6 年前。 Improv
似乎包括与 provided 的直接依赖关系范围很好理解。似乎还包括带有 runtime 的传递依赖项。范围也很容易实现。 但是我如何才能包含两个间接级别的依赖项? 例子: A --> B --> C
我有以下情况: 我想在我的另一个项目中使用我的一个项目(托管在 bintray.com 上)。 我设置了一个 Maven 存储库,上传了 Artifact 和 pom 文件,然后能够使用上传到 bin
我是一名优秀的程序员,十分优秀!