【发布时间】:2014-12-25 05:19:52
【问题描述】:
对于一个可以从重构中受益的大型项目,我的目标之一是减少耦合。我在这里将耦合视为将代码分解为非常小的/逻辑编译单元的能力,就像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)*
【问题讨论】:
-
你的目标文件不应该依赖于头文件(你为什么还要编译头文件?),源文件应该。
-
不!不!不!宏,宏!请不要再使用宏了!
-
是的,如果我没有说清楚它需要大量重构,.hpp 文件中充满了代码。如果我不是一次通过这些资源来处理事情,我会使用更通用的方法。
标签: c++ makefile decoupling