cmake之引入外部專案(引用其他專案)、FetchContent管理子模組
阿新 • • 發佈:2020-09-20
本文CMAKE版本為3.18
1. 關於
截至目前,我知道的,有兩種方式引入外部專案
A. git下的Submodle
使用命令可以將克隆的專案新增到當前專案,作為子專案使用,比如,fmt庫為例:
git submodule add https://gitee.com/mohistH/fmt.git
如果Submodle不熟悉?請參考官方文件
B. cmake的FetchContent
本文將側重介紹這種方式 ,至於具體需要怎麼使用FetchContent,這裡就不重複了,請參考官方文件
2. FetchContent的一個簡單例子
這裡,以下載spdlog庫作為專案的子模組使用,直接將下載子模組的程式碼配置寫到了top directory
- 2.1 目錄結構
.
├───build # cmake的輸出檔案
├───ext # spdlog等第三方庫的存放目錄
├───include # 標頭檔案路徑
├───src # 原始檔路徑
└───CMakeLists.txt # top directory下的cmake配置檔案
- 2.2 top directory下的cmake配置檔案CMakeLists.txt檔案原始碼
cmake_minimum_required(VERSION 3.18) project(spdlog_demo VERSION 1.0.1) # 因為spdlog是基於c++11的庫 set(CMAKE_CXX_STANDARD 11) # 指定原始檔 set(src_file ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cc ) # 建立可執行程式專案 add_executable(spdlog_demo ${src_file} ) # 指定標頭檔案路徑 target_include_directories(spdlog_demo PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include/) # 指定lib檔案路徑 target_link_libraries( spdlog_demo PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) # fetchcontent重點來了 #------------------------------------------------------------------- include(fetchcontent) # 照寫,不需要修改 fetchcontent_declare( spdlog #庫名字 GIT_REPOSITORY https://gitee.com/mohistH/spdlog.git # 倉庫地址 GIT_TAG v1.x # 庫版本 SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ext/spdlog # 指定庫下載地址 ) fetchcontent_makeavailable(spdlog) # 專案中使用spdlog target_link_libraries(spdlog_demo PRIVATE spdlog::spdlog) #-------------------------------------------------------------------
這裡建立了一個專案spdlog_demo,該專案引用了子模組spdlog,本地沒有spdlog,上面的程式碼中則是在呼叫cmakelists.txt的時候下載spdlog的原始碼
- 2.3 轉到build目錄,使用
cmake ..
, 就開始配置專案了,並下載原始碼spdlog, 將spdlog的原始碼放到了top directory下的ext資料夾下。