CMake使用整理

2021-08-04 18:53:51 字數 3260 閱讀 5055

cmake是乙個跨平台的安裝(編譯)工具,可以用簡單的語句來描述所有平台的安裝(編譯過程)。

它使用乙個名為 cmakelists.txt 的檔案來描述構建過程,

可以產生標準的構建檔案,如 unix 的 makefile 或windows visual c++ 的 projects/workspaces 。

檔案 cmakelists.txt 需要手工編寫,也可以通過編寫腳

本進行半自動的生成。

在 linux

平台下使用 cmake 生成 makefile 並編譯的流程如下:

編寫cmakelists.txt

執行命令cmake path或者ccmake path生成makefile ( pathcmakelists.txt所在的目錄)

使用make命令進行編譯。

cmake的所有的語句都寫在乙個叫:cmakelists.txt 的檔案中。

cmakelists.txt中常用指令如下:

1. cmake_minimum_required(version 2.8)           檢查cmake的版本,至少為2.8

2. project(helloworld)                                            工程名為helloworld

3. aux_source_directory(.  src_list)                     查詢當前目錄下所有的原始檔並儲存到src_list變數中

4. include_directories(./include ./abc)                      將./include和./abc加入包含目錄列表

5. link_directories(./lib)                                         將 ./lib加入編譯器鏈結階段的搜尋目錄列表

6. add_executable(hello  $(src_list})                  使用src_list原始檔列表裡的檔案生成乙個可執行檔案hello

7. add_library(hello static $)            使用src_list原始檔列表裡的檔案生成乙個靜態鏈結庫libhello.a

8. add_library(hello shard $)            使用src_list原始檔列表裡的檔案生成乙個動態鏈結庫libhello.so

9. target_link_libraries(hello a b.a c.so)                  將若干庫檔案鏈結到目標hello中,target_link_libraries裡的庫檔案的順序符合gcc/g++鏈結順序的規則,即被依賴的庫放在依賴它的庫的後面,如果順序有錯,鏈結時會報錯。

10. 自定義鏈結選項

11. 自定義makefile目標target_link_libraries(... ... ...)  其中必須在當前目錄中被add_executable()命令或add_library()命令建立出來。

12.賦值操作

set(變數名 變數值)   

比如:set(src_list main.c t1.ct2.c)

13. set(cmake_build_type debug)   # 設定構建型別為debug,也可設定為release。

14.add_subdirectory(src_dir [binary_dir] [exclude_from_all])

向當前工程新增存放原始檔的子目錄,並可以指定中間二進位制和目標二進位制的存放位置,如:add_subdirectory(src)

cmake指令碼的語法中沒有賦值操作,無論是賦值,還是比較、判斷操作,都是通過內建命令來完成的,例如"set(),math()等"。並且cmake中的內建命令不區分大小寫。

所有的內建命令呼叫形式為:

command(arg1 arg2 arg3 ... argn)

每個引數均以空格,或者分號分割。注:不建議使用分號分割引數.

對於變數值的引用,和直接引用這個變數本身,使用方式分別是:

$ 和 varname

小型程式的cmakelists.txt模板:

cmake_minimum_required(version 2.8)   //cmake的最低版本

project(example)    //專案名

include_directories("/usr/include")  //程式所需標頭檔案的位置

link_directories("/usr/lib")   //程式所需庫檔案的位置

add_executable(example example.cpp)   //編譯example.cpp生成example物件檔案

target_link_libraries(example gsl)  //鏈結libgsl.a鏈結庫檔案到example物件檔案中

target_link_libraries(example gslcblas) //鏈結libgslcblas.a鏈結庫檔案到example物件檔案中

當cmakelists.txt檔案確定後,可以用ccmake命令對相關 的變數值進行配置。這個命令必須指向cmakelists.txt所在的目錄。配置完成之後,應用cmake命令生成相應的makefile(在unix like系統下)或者 project檔案(指定用window下的相應程式設計工具編譯時)。

終端命令視窗下,其基本操作流程為:

$> ccmake directory

$> cmake directory

$> make

其中directory為cmakelist.txt所在目錄;

reference:

1.2.

3.4.這是乙個系列介紹,講了很多很細。

5. 用豐富的示例由簡單到複雜進行說明,非常推薦。

6. 詳細介紹了cmakelists.txt的常用指令和含義,非常推薦+1

CMake 學習筆記整理 7

把筆記分享給大家!接上篇內容 cmake 學習筆記整理 6 t17 之前的筆記t9,install files xyz.h destination include xyz proj2 src main.cpp include int main cmake 被設計成了可擴充套件的架構,可以通過編寫一些...

cmake使用範例

cmake作為一款跨平台的專案構建工具,其使用範圍已經越來越廣,本文以實際專案為例,展示乙個使用該編譯工具的模板。希望我們都能在這些高效的工具幫助下都享受程式設計的樂趣。project src libs modules includes build bin cmakelists 根目錄下cmakel...

Cmake使用例程

cmake使用例程如下 1 cmake工具需要核心支援sctp模組,需要安裝sctp開發包 lksctp tools 以及lksctp tools devel 2 在linux系統內安裝cmake 3 如何建立乙個包含多個源資料夾的工程 本文這裡以socket 通訊為例 1 新建以下資料夾 buil...