一、背景
基于CMake的文件目录结构需要有一个统一的规范,方便后续项目的管理及提高开发效率,调研了网上一些开源项目的目录结构后做如下的总结。主要从工程目录结构、工程文件引入、三方库管理几个方面进行总结
二、工程目录结构
1、工程目录结构
project_name
├── deploy
├── 3rd
├── src
├── resources
├── LICENSE
├── CMakeLists.txt
├── main.cpp
├── MainWindow.h
├── MainWindow.cpp
├── MainWindow.ui
├── .gitignore
├── vcpkg.json
deploy : 用于存放部署、交付的文件,其包含本项目最总生成的可执行文件。
3rd : 用于存放第三方库,每个第三库以单独目录的形式组织在3rdparty目录下。其中每个第三方目录下又有
include
和lib
分别存放第三方库的头文件和库文件。src : 存放源码文件,以及内部头文件。
LICENSE : 版权信息说明。
CMakeLists.txt : cmake文件。
vcpkg.json :三方库管理
2、编译文件自动化管理
基于CMake+Clion工程目录文件管理主要在如下几种使用场景:
1、新建文件时可以自动添加文件到CMakeLists.txt中,但删除时需要手动从CMakeLists.txt中移出
2、拖拽从外面拖拽源代码文件到Clion中需要手动添加到CMakeLists.txt中,删除时也一样
特别是第2点对于引入包含很多代码的外部开源代码是非常不方便的。这里按照如下方式自动化管理源文件,如下的cmake代码代表src目录下(包括子目录)所有.h .cpp,.ui文件自动被检索出来存入PROJECT_SOURCES变量,这样以任意方式往src目录及其子目录中添加cpp文件都可以被自动关联了
include_directories(src)
set(SRC_DIR ${CMAKE_SOURCE_DIR}/src)
# 将src目录(及子目录下)的所有.h .cpp,.ui文件遍历出来存入SRC_SOURCES变量
file(GLOB_RECURSE SRC_SOURCES
"${SRC_DIR}/*.h"
"${SRC_DIR}/*.cpp"
"${SRC_DIR}/*.ui"
)
LIST(APPEND PROJECT_SOURCES ${SRC_SOURCES})
Tips:新增文件后需要Tools->CMake->Reload CMake Project,否则可能出现找#include 提示找不到文件的现象。
三、三方库管理
1、vcpkg
vcpkg是Microsoft推出的免费的c/c++桌面端跨平台包管理器,配合CMake它可以非常方便在项目中引入三方库。如下为在项目中通过vcpkg引入aws微软云存储库的步骤:
- 安装vckpg(如果未安装)
MacOS14下安装
brew install pkg-config
brew install nasm
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
Windows10下安装
要先安装Visual Studio,选择如下组件。否则无法使用vcpkg。
git clone https://github.com/Microsoft/vcpkg.git
cd C:\Users\zsz\CLionProjects\MytestApp
C:\Users\zsz\Developer\vcpkg install
- 添加三方库依赖信息
在项目根目录下创建vcpkg.json文件
{
"dependencies": [
{
"name": "aws-sdk-cpp",
"version>=": "1.11.169"
}
],
"builtin-baseline": "01acfdfde3ed99280d3883a8fccd5fa4408f5214",
"overrides": [
{
"name": "aws-sdk-cpp",
"version": "1.11.169"
}
],
"name": "vcpkg",
"version": "1.0"
}
builtin-baseline: 基于vcpkg的某一次提交的SHA值,只有配置这个后才可以指定三方库的特定版本。
1、"dependencies"中配置"version>="字段,指定最小版本,每次重新编译时会使用不小于某版本的最新版本
2、"overrides"中配置version字段,指定具体版本,需配置最小版本且要大于等于最小版本才会有效
具体文档参考官网文档
建议引用三方库最好指定具体版本,即上述1、2步骤中的全部都配置
- 安装三方库
cd /Users/zhuangshanzhi/Developer/MytestApp
/Users/zhuangshanzhi/Developer/vcpkg/vcpkg install
备注:这里最好手动调用vcpkg命令安装vcpkg.json里面的三方库,因为Clion内置的cmake版本和vcpkg内置的cmake的版本不一致,编译可能会出错(例如ffmpeg库).
- 刷新工程配置
首先在Clion-->Settings-->Build,Exception,Deployment-->CMake-->CMake Options 下添加
-DCMAKE_TOOLCHAIN_FILE=/Users/zhuangshanzhi/Developer/vcpkg/scripts/buildsystems/vcpkg.cmake
换成自己电脑上的vcpkg路径
然后Tools-->CMake-->Reload Cache And Reload Project