cmake是乙個跨平台的安裝(編譯)工具,可以用簡單的語句來描述所有平台的安裝(編譯過程)。
它使用乙個名為 cmakelists.txt 的檔案來描述構建過程,
可以產生標準的構建檔案,如 unix 的 makefile 或windows visual c++ 的 projects/workspaces 。
檔案 cmakelists.txt 需要手工編寫,也可以通過編寫腳
本進行半自動的生成。
在 linux
平台下使用 cmake 生成 makefile 並編譯的流程如下:
編寫
cmakelists.txt
。
執行命令
「
cmake path
」
或者
「
ccmake path
」
生成
makefile ( path
是
cmakelists.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...