携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情
makefile概念
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作系统的命令
cmake简介
cmake会生成Makefile,然后我们需要调用make来生成可执行文件。
官方介绍
CMake is widely used for the C and C++ languages,
but it may be used to build source code of other
languages too.
简述:cmake是一个跨平台的c/c++构建工具,
流程
graph TD
熟悉目录 --> 根据目录copy --> 执行cmake
构建
## 外部构建
# 1.在当前目录下
mkdir -p build
cd build
# 2.编译上级目录的CMakeLists.txt生产 Makefile文件和其他文件
cmake ..
# 3.执行make命令,生成target
make
目录结构
├── build
├── CMakeLists.txt
├── include
│ └── swap.h
├── main.cpp
└── src
└── swap.cpp
开始copy
mkdir xxx && cd xxx
新建一个工程xxx 根据目录copy对应文件
swap.h
#pragma once
#include <iostream>
class swap{
public:
swap(int a,int b):_a(a),_b(b){}
swap(){}
~swap(){}
void run();
void printInfo();
private:
int _a;
int _b;
};
swap.cpp
#include "swap.h"
void swap::run(){
int temp;
temp = _a;
_a = _b;
_b = temp;
}
void swap::printInfo(){
std::cout<<"_a = "<<_a<<std::endl;
std::cout<<"_b = "<<_b<<std::endl;
}
CMakeList.txt
# 指令大小写无关
# 1.指定最小版本
cmake_minimum_required(VERSION 3.0)
# 2.工程名
project(HELLOWORD)
# 引入头文件
include_directories(include)
# 源文件
add_executable(main_cmake main.cpp src/swap.cpp)
main.cpp
#include "swap.h"
int main(int argc,char **argv){
swap myswap(10,20);
std::cout<<"Before swap: \n";
myswap.printInfo();
std::cout<<"After swap: \n";
myswap.run();
myswap.printInfo();
return 0;
}
开始构建
进入build目录
依次执行
- cmake ..
- make
- ./main_cmake
大功告成 哇哈哈哈
总结
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。