cmake 基礎
cmake主要是生成Makefile,以便工程管理,只需要編寫CMakeLists.txt
安裝camke
sudo apt install cmake 安裝cmake
camke --version 查看cmake版本
sudo apt upgrade cmake 升級cmake
源碼隔離
在工程文件下創建一個build文件,進入到build目錄下進行*cmake …*就可以將產生的中間文件進行隔離開,并且源文件的結構沒有影響,最后生成的可執行文件生成在bulid下(可以進行指定)
cmake基本語法
1. 多文件編譯
語法:
>add_executable(可執行文件 源文件1 源文件2 … …)
假設某可執行文件 main 由多個源碼文件編譯而成:
add_executable(main main.c a.c b.c)
2. 指定頭文件路徑
語法:
include_directories(頭文件所在路徑) --其中文件所在的路徑可以是相對路徑,也可以是絕對路徑
例如現在的目錄結構為
在cmake中需要指明對應文件的相對路徑或者就對路徑
3.設定變量常用的shell命令
語法
set(變量名稱,變量值)
在上述例子中使用了預定義變量,來獲取當前的Cmakefile.txt的值,這樣寫的代碼可維護,可讀性更強
4. 添加子工程目錄和編譯庫文件
語法
如果有一個工程目錄下有lib文件夾,其中有源碼,需要將其翻譯成動態庫或者靜態庫
者其中有兩個CMakeLists.txt,其中外層的CMakeLists.txt是負責整個工程,內層的CMakeLists,txt負責指導Makefile如何編譯lib中的文件
此時,只需要在 lib/ 下增加一個 CMakeLists.txt 文件即可,其內容如下:(內層)
add_library(a SHARED a.c) #a:生成靜態庫的名稱 參數 所需的源文件
add_library(b STATIC b.c) # 靜態庫是默認的,此處STATIC 可以不寫
STATIC:靜態編譯
SHARED:動態編譯
注意,上述關鍵字 SHARED 和 STATIC 必須是大寫。然后在頂層 CMakeLists.txt 增加該子目錄的包含語句
在外層的CMakeLists.txt里面需要調用底層的CMakeLists.txt文件 代碼如下:
總結 創建庫
(1)對庫里的源文件進行編譯行為進行知道
(2)頂層cmake調用底層cmake add_subdirectory
(3)指定庫文件的路徑link_libraries
(3)為需要生成的可執行文件添加庫的鏈接target_link_libraries
5.鏈接第三方庫文件
如果主程序所依賴的庫文件在別處
注意:語句 link_directories() 要寫在 add_executable() 之前
6.指定工具鏈
如果項目在特定的平臺上,會有交叉編譯器,則需要指定工具鏈
7.設置編譯選項
set(CMAKE_C_FLAGS “-O2 -Wl,-rpath=./lib”) # 設定優化等級和運行庫所在路徑
其中*-WL是指定編譯器鏈接動態庫的路徑-rpath*r就是run,就是程序在運行時所加載的動態庫
8.設定cmake的最低版本
9.設定項目的名稱
只可以出現在頂層的CMake中