第一份Makefile

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

这里写图片描述


推荐学习资源

跟我一起写Makefile

猜你喜欢

转载自blog.csdn.net/nzyalj/article/details/78615391