本示例采用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++项目的构建。