CMake 实践
2021-01-14 13:52:01

相关说明

当前的 C++ 工具链为VSCode+MinGW+CMake

不知为何CLion找不到我用 LxRunOffline 搭建的 WSL2-arch,挺头晕的,也一直没解决

样本项目的结构如下:

1
2
3
4
5
6
7
8
.
├── CMakeLists.txt
├── include
│ └── util.h
├── lib
│ └── libutil.a
└── src
└── main.cpp

工程起名

1
2
3
project(${PROJECT_NAME})
# 举例
project(hello)

寻找头文件

1
include_directories(${CMAKE_CURRENT_LIST_DIR}/include)

${CMAKE_CURRENT_LIST_DIR}CMakeLists.txt 所在路径

寻找源文件

1
aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src project_src)

${CMAKE_CURRENT_LIST_DIR}/src路径下所有源文件保存到project_src

须知:

-aux_source_directory()无法递归包含子目录

  • src 中有新的源文件添加时,${project_src}不包含新添加的源文件,需要重新cmake

寻找库文件

1
link_directories(${CMAKE_CURRENT_LIST_DIR}/lib)

指定 Makefile 生成位置

1
set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_LIST_DIR}/build)

构建目标

1
add_executable(${PROJECT_NAME} ${project_src})

${project_src}中的源文件生成可执行文件${PROJECT_NAME}

启用 C++11

1
2
3
set(CMAKE_CXX_FLAGS   "-std=c++11")             # c++11
set(CMAKE_CXX_FLAGS "-g") # 调试信息
set(CMAKE_CXX_FLAGS "-Wall") # 开启所有警告

构建

CMakeLists.txt文件大致可以这样写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cmake_minimum_required (VERSION 3.19.0)

project(${PROJECT_NAME})

include_directories(${CMAKE_CURRENT_LIST_DIR}/include)

aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src project_src)

link_directories(${CMAKE_CURRENT_LIST_DIR}/lib)

add_executable(${PROJECT_NAME} ${project_src})

set(CMAKE_CXX_FLAGS "-std=c++11")
set(CMAKE_CXX_FLAGS "-g")
set(CMAKE_CXX_FLAGS "-Wall")

SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_LIST_DIR}/build) # 设置可执行文件路径

接下来可用两种方法:

  1. 进入项目,创建build文件夹用于构建
1
2
3
mkdir build
cd build
cmake -G "Unix Makefiles" ../

cmake -G "Unix Makefiles" ../这条命令用于第一次构建,后续需要重构时用camke .
2. 利用VSCodeCMake相关插件

image-20210114221146250