一、背景
基于CMake的文件目錄結(jié)構(gòu)需要有一個統(tǒng)一的規(guī)范,方便后續(xù)項目的管理及提高開發(fā)效率,調(diào)研了網(wǎng)上一些開源項目的目錄結(jié)構(gòu)后做如下的總結(jié)。主要從工程目錄結(jié)構(gòu)、工程文件引入、三方庫管理幾個方面進行總結(jié)
二、工程目錄結(jié)構(gòu)
1、工程目錄結(jié)構(gòu)
project_name
├── deploy
├── 3rd
├── src
├── resources
├── LICENSE
├── CMakeLists.txt
├── main.cpp
├── MainWindow.h
├── MainWindow.cpp
├── MainWindow.ui
├── .gitignore
├── vcpkg.json
deploy : 用于存放部署、交付的文件,其包含本項目最總生成的可執(zhí)行文件。
3rd : 用于存放第三方庫,每個第三庫以單獨目錄的形式組織在3rdparty目錄下。其中每個第三方目錄下又有
include和lib分別存放第三方庫的頭文件和庫文件。src : 存放源碼文件,以及內(nèi)部頭文件。
LICENSE : 版權(quán)信息說明。
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文件都可以被自動關(guān)聯(lián)了
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,否則可能出現(xiàn)找#include 提示找不到文件的現(xiàn)象。
三、三方庫管理
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。
image.png
git clone https://github.com/Microsoft/vcpkg.git
cd C:\Users\zsz\CLionProjects\MytestApp
C:\Users\zsz\Developer\vcpkg install
- 添加三方庫依賴信息
在項目根目錄下創(chuàng)建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字段,指定具體版本,需配置最小版本且要大于等于最小版本才會有效
具體文檔參考官網(wǎng)文檔
建議引用三方庫最好指定具體版本,即上述1、2步驟中的全部都配置
- 安裝三方庫
cd /Users/zhuangshanzhi/Developer/MytestApp
/Users/zhuangshanzhi/Developer/vcpkg/vcpkg install
備注:這里最好手動調(diào)用vcpkg命令安裝vcpkg.json里面的三方庫,因為Clion內(nèi)置的cmake版本和vcpkg內(nèi)置的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
