对于可以从重构中受益的大型项目,我的目标之一是减少耦合。我正在考虑将此处的耦合作为将代码分解为非常小/逻辑编译单元的能力,就像在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)*
答案 0 :(得分:1)
从粗略的看,似乎你的问题是你的&#34;%。o:%。hpp&#34;和&#34;%o:%。cpp&#34;规则实际上并不生成左侧列出的文件。通常make通过检查左侧列出的文件并确定它是否比作为其依赖项列出的文件更新来确定没有工作要做,但由于左侧的文件永远不会由于规则,必须始终执行规则。尝试指定&#34; .object / foo.o&#34;在左侧而不是劫持内置规则(我还强烈建议不要使用诸如&#34; CC&#34之类的破坏命令;这应该由Make提供。)