浅谈在vscode第一次使用CMakeLists构建多文件项目的过程

185 阅读2分钟

本示例采用cpp。如使用C则雷同

众所周知,在*.h文件中写声明(函数+常量),在*.cpp文件写定义函数,在main.cpp文件(一般)项目核心逻辑。本示例将采用这个思路展开。

项目结构

.
├── build
├── CMakeLists.txt
├── sort.h
├── sort.cpp
└── main.cpp

我们最终构建的结果放在build文件夹中

模板代码

这边采用快速排序作示例

sort.h

#ifndef SORT
#define SORT

#include<iostream>

void insertSort(int a[], int len);
void mergeSort(int a[], int p, int r);
void heapSort(int A[], int len);
void quickSort(int A[], int p, int r);

#endif

sort.cpp

#include "sort.h"
int partition(int A[], int p, int r) {
    int pivot = A[r - 1];
    int i = p - 1;
    for (int j = p; j <= r - 1; j++) {
        if (A[j - 1] <= pivot) {
            i++;
            int tmp = A[i - 1];
            A[i - 1] = A[j - 1];
            A[j - 1] = tmp;
        }
    }
    int tmp = A[i];
    A[i] = A[r - 1];
    A[r - 1] = tmp;
    return i + 1;
}
void quickSort(int A[], int p, int r) {
    if (p < r) {
        int q = partition(A, p, r);
        quickSort(A, p, q - 1);
        quickSort(A, q + 1, r);
    }
}

main.cpp

#include<iostream>
#include"sort.h"
using namespace std;
int main() {
    int nums[] = {1, 5, 3, 9, 7, 8, 10, 6};
    quickSort(nums, 1, 8);
    for (int i = 0; i < 8; i++) {
        cout << nums[i] << " ";
    }
    cout << endl;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.12)  #cmake必备,指明cmake下限版本需求,一般结合自己cmake版本即可
project(A)#工程名称,注意工程名称不是生成文件的名称

#设置编译器(一般是由系统默认可以不写的,也可以人为指定编译器版本)
#SET(CMAKE_C_COMPILER "/usr/local/bin/gcc")
#SET(CMAKE_CXX_COMPILER "/usr/local/bin/g++")
add_executable(test #生成文件名称
  main.cpp sort.cpp #生成文件B所需的源文件(只需要源文件,不需要指明头文件)
)

构建过程

初始位于main.cpp同级目录

cd build
cmake .. # 生成CMakefiles等
make # 构建
./test # 运行生成文件

后记

得益于CLion等现代化的IDE,普通程序员构建多文件的C/Cpp项目不再困难,只需要书写普通的CMakeLists.txt即可。但其实CMakeLists不依赖于CLion,即使在vscode上,我们通过书写CMakeLists.txt,也可以高效实现多文件C++项目的构建。