版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nzyalj/article/details/78615391
前言
因为比较喜欢Javascript,而其引擎是用C++写的,而且最近打算学习算法,所以重拾C++,在学校还是大一下学习学的,现在都大三上学习快结束了,虽然这学期学了VC++,但还是觉得忘的差不多了……
以前都是用IDE自动编译运行,或者仅仅就是翘g++,但是如果是一个比较大大工程的话这么办?JavaScript有npm可以写自动化脚本,那c++当然可以,那就是Makefile喽!
环境
GUN make v3.81
g++ v4.2.1
MacOS (Linux也可以,Windows可能有些cli指令不同)
项目结构
├── Makefile
├── bin # 可执行文件存放处
└── src # 源文件存放处
├── MyClass.cpp
├── MyClass.h
└── main.cpp
源文件内容
// MyClass.h
#ifndef C_TEST_MYCLASS_H
#define C_TEST_MYCLASS_H
class MyClass {
public:
MyClass();
void sayHi();
protected:
private:
};
#endif //C_TEST_MYCLASS_H
// MyClass.cpp
#include "MyClass.h"
#include <iostream>
MyClass::MyClass() {}
void MyClass::sayHi() {
std::cout<<"Hi, how are you"<<std::endl;
}
// main.cpp
#include "MyClass.h"
int main() {
MyClass myClass;
myClass.sayHi();
return 0;
}
Makefile 文件内容
Makefile中可以使用变量,并通过 $()
调用
# 指定编译器
CC=g++
# 设置编译器配置
CFLAGS=-c -Wall -std=c++11
# 指定源文件存放路径
SRC_DIR=src
# 指定编译生成二进制文件存放路径
BIN_DIR=bin
# make的默认指令
all: hello
# 编译并执行指令,同时删除所有链接文件
run: hello
rm -rf $(SRC_DIR)/*.o
./$(BIN_DIR)/hello
# 清楚所有链接文件指令
clean:
rm -rf $(SRC_DIR)/*.o
# 链接所有链接文件生成可执行文件
hello: $(SRC_DIR)/main.o $(SRC_DIR)/MyClass.o
$(CC) $(SRC_DIR)/main.o $(SRC_DIR)/MyClass.o -o $(BIN_DIR)/hello
# 生成链接文件
main.o: $(SRC_DIR)/main.cpp
$(CC) $(CFLAGS) $(SRC_DIR)/main.cpp
# 生成链接文件
MyClass.o:$(SRC_DIR)/MyClass.cpp $(SRC_DIR)/MyClass.h
$(CC) $(CFLAGS) $(SRC_DIR)/MyClass.cpp
运行
生成可执行文件
make
删除所有链接文件
make clean
生成可执行文件并运行,同时删除所以链接文件
make run