阅读make和gcc手册真的需要很长时间。由于我只需要它们的一些基本功能,我想快速学习它们。
项目目录如下所示。
CWD
|----Source----1.cpp
|----Header----1.h
|----Object----1.o
|----Makefile
当前工作目录中有三个目录和一个Makefile,“1.cpp”包含“1.h”。我想使用CWD中的Makefile来编译项目,使对象输出在Object目录中。
这是我现在遇到的问题的简化版本。由于从头开始比较困难,有人可以帮我写一个Makefile来解决这个简单的问题吗?我将尝试从中学习并解决我自己的问题。或者任何人都可以建议我需要学习哪些make和gcc来解决这个问题。
提前致谢。
答案 0 :(得分:2)
这足以编译源并生成对象:
Object/1.o: Source/1.cpp Header/1.h
$(CXX) -c Source/1.cpp -IHeader -o Object/1.o
如果要构建可执行文件,可能称为“one”,请在上面添加另一条规则:
one: Object/1.o
$(CXX) Object/1.o -o one
Object/1.o: Source/1.cpp Header/1.h
$(CXX) -c Source/1.cpp -IHeader -o Object/1.o
要清理一点,请使用automatic variables:
one: Object/1.o
$(CXX) $^ -o $@
Object/1.o: Source/1.cpp Header/1.h
$(CXX) -c $< -IHeader -o $@
如果你想让第二条规则更通用,以便它可以处理更多对象,你可以将第二条规则转换为pattern rule并分隔1.o
的标题依赖:
one: Object/1.o
$(CXX) $^ -o $@
Object/1.o: Header/1.h
Object/%.o: Source/%.cpp
$(CXX) -c $< -IHeader -o $@
当你做好准备时,当然还有更多你可以做的事。