gpt4 book ai didi

c++ - 使用 makefile 识别和减少耦合

转载 作者:行者123 更新时间:2023-11-28 06:30:40 26 4
gpt4 key购买 nike

对于可以从重构中获益的大型项目,我的目标之一是减少耦合。我在这里将耦合视为将代码分解为非常小的/逻辑编译单元的能力,就像在 This document 3.1 中解释耦合的方式一样。 .

所以我正在编写一个makefile 来测试我一个人的源文件。目的是将所有目标文件编译到 .object/ 目录。这个想法是,当这些大型源文件无法组装时,我发现了一个需要注意的地方。

问题是 makefile 每次都会编译每个源代码,但我找不到导致它的规则。

在使用这样的 makefile 时,我的方法有误吗?有没有更好的方法来进行这种重构 - 除了使用内置这些工具的 IDE 之外?

CC       = g++
CC_FLAGS = -std=c++0x -pthread
LI_FLAGS =
EXEC = UAVapp.o
OUT = .object/

#Types/
T = Arming.hpp JCommand.hpp
TYPES = $(T:%=Types/%)

#Extensions
HPP = Defines.hpp $(TYPES)
CPP =

#Groups
COBJ = $(CPP:.cpp=.o)
HOBJ = $(HPP:.hpp=.o)

all: PRE $(EXEC)

# Main target
$(EXEC): $(HOBJ)
touch $(EXEC)
#$(CC) $(LI_FLAGS) $(CC_FLAGS) $(OUT)$(COBJ) -o $(EXEC)


%.o:%.hpp
$(CC) -c $< $(CC_FLAGS) -o $(OUT)$(notdir $@)
%.o:%.cpp
$(CC) -c $< $(CC_FLAGS) -o $(OUT)$(notdir $@)

# Do work before compilation
PRE:
@mkdir -p $(OUT)
clean:
rm -rf ./*.o $(EXEC) ./$(OUT)*

最佳答案

粗略地看,您的问题似乎是您的“%o:%.hpp”和“%o:%.cpp”规则实际上并未生成左侧列出的文件。通常 make 通过检查左侧列出的文件并确定它是否比作为其依赖项列出的文件更新来确定没有工作要做,但是由于左侧的文件永远不会因为规则,必须始终执行该规则。尝试在左侧指定“.object/foo.o”,而不是劫持内置规则(我也强烈建议不要破坏命令,例如 Make 应该提供的“CC”)。

关于c++ - 使用 makefile 识别和减少耦合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27644406/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com