简单好看个人主页网站模板,wordpress管理地址,网站开发者取色工具,ASP.NET实用网站开发答案笔记来源#xff1a;于仕琪教授#xff1a;Makefile 20分钟入门#xff0c;简简单单#xff0c;展示如何使用Makefile管理和编译C代码
操作环境
MacosVscode
前提准备
新建文件夹
mkdir learn_makefile新建三个cpp文件和一个头文件
// mian.cpp
#include iostrea…笔记来源于仕琪教授Makefile 20分钟入门简简单单展示如何使用Makefile管理和编译C代码
操作环境
MacosVscode
前提准备
新建文件夹
mkdir learn_makefile新建三个cpp文件和一个头文件
// mian.cpp
#include iostream
#include functions.h
using namespace std;
int main()
{printhello();cout This is main: endl;cout The factorial of 5 is: factorial(5) endl;return 0;
}// factorial.cpp
#include functions.h
int factorial(int n)
{if(n 1)return 1;elsereturn n * factorial(n-1);
}// printhello.cpp
#include iostream
#include functions.h
using namespace std;
void printhello()
{cout Hello world endl;
}// function.h
#ifndef _FUNCTIONS_H_
#define _FUNCTIONS_H_
void printhello();
int factorial(int n);
#endif不使用makefile进行编译链接操作
进入learn_makefile文件夹下进行操作
g main.cpp factorial.cpp printhello.cpp -o main
./main创建Makefile文件 版本一
# Makefile文件# VERSION 1
# hello为生成的可执行文件依赖于后面的三个.cpp文件
# g前面加一个TAB的空格
hello: main.cpp printhello.cpp factorial.cppg -o hello main.cpp printhello.cpp factorial.cpp在learn_makefile文件夹下执行以下命令makefile文件的使用方法
make
./hello创建Makefile文件版本二
# VERSION 2
CXX g
TARGET hello
OBJ main.o printhello.o factorial.o
# make时执行g 先找TARGETTARGET不存在找OBJOBJ不存在编译三个.cpp文件生成.o文件
# 然后再编译OBJ文件生成可执行文件hello
$(TARGET): $(OBJ)$(CXX) -o $(TARGET) $(OBJ)
# main.o这样来的编译main.cpp生成
main.o: main.cpp$(CXX) -c main.cpp
printhello.o: printhello.cpp$(CXX) -c printhello.cpp
factorial.o: factorial.cpp$(CXX) -c factorial.cpp创建Makefile文件版本三
# VERSION 3
CXX g
TARGET hello
OBJ main.o printhello.o factorial.o# 编译选项显示所有的warning
CXXLAGS -c -Wall# $表示的就是冒号前面的TARGET$^表示的是冒号后OBJ的全部.o依赖文件
$(TARGET): $(OBJ)$(CXX) -o $ $^# $表示指向%.cpp依赖的第一个但是这里依赖只有一个
# $表示指向%.o
%.o: %.cpp$(CXX) $(CXXLAGS) $ -o $# 为了防止文件夹中存在一个文件叫clean
.PHONY: clean# -f表示强制删除此处表示删除所有的.o文件和TARGET文件
clean:rm -f *.o $(TARGET)创建Makefile文件版本四
# VERSION 4
CXX g
TARGET hello
# 所有当前目录的.cpp文件都放在SRC里面
SRC $(wildcard *.cpp)
# 把SRC里面的.cpp文件替换为.o文件
OBJ $(patsubst %.cpp, %.o,$(SRC))CXXLAGS -c -Wall$(TARGET): $(OBJ)$(CXX) -o $ $^%.o: %.cpp$(CXX) $(CXXLAGS) $ -o $.PHONY: clean
clean:rm -f *.o $(TARGET)