cmake快速开始

141 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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目录

依次执行

  1. cmake ..
  2. make
  3. ./main_cmake
  4. 大功告成 哇哈哈哈

总结

makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。

其它

CMake 常用操作指令

cmake

vscode+cmake