Ubuntu下cmake教程實踐從入門到會用

2021-09-24 10:00:19 字數 2885 閱讀 8050

首先當然得安裝cmake這個網上教程多如牛毛就不講了。

然後在當前目錄下建立這兩個檔案(如下所示cmakelists.txt這個檔名是固定的而且大小寫不要錯了,main.c是我們寫的c語言**):

.

├── cmakelists.txt

└── main.c

上述兩個檔案的內容分別如下:

《檔案cmakelists.txt的內容》

project(hello)

aux_source_directory(. dir_srcs)

add_executable(hello $)

注意:project()它是指定當前這個專案的名字,你可以隨便寫的沒關係的。aux_source_directory()中的第乙個引數是指定原始檔所在資料夾(在本例子中是當前目錄,就是乙個點),第二個引數是把源資料夾所有源檔名存到dir_srcs這個變數中。add_executable()它指定的是把哪些原始檔編譯成目標檔案。以及目標檔案名叫啥。這這個例子中的目標檔名叫做hello你可以隨便寫的沒關係的。但是後面那個原始檔位址$這個不能隨便寫,它的意思是讀取dir_srcs這個變數的值(在本例子中這個變數值是源檔名)。

《檔案main.c的內容》

#includeint main()

把命令列的工作目錄切換到在當前有cmakelists.txt的這個目錄下,

然後輸入cmake ./,注意後面那是兩個符號「點+斜槓」表示編譯當前目錄。你會發現你當前目錄下多了很多檔案。

然後輸入make產生目標可執行檔案。然後你會發現當前資料夾下面多了乙個可執行檔案hello。你可以試試./hello執行這個可執行檔案。

$ make

scanning dependencies of target hello

[ 50%] building c object cmakefiles/hello.dir/main.c.o

[100%] linking c executable hello

[100%] built target hello

到這裡就完全入門了cmake,是不是很簡單。但是你會發現源**和目標檔案以及編譯的中間**都在乙個資料夾裡面,這個就非常煩人。一般處理方式就是把源**和目標檔案分開。接下來就是介紹如何將源**和目標檔案分開編譯。

我們把源**放在src這個資料夾內,bin目錄暫時為空到時候把編譯後的檔案全放到bin資料夾中。記得在當前目錄和src目錄下面兩個目錄都要建立cmakelists.txt

.

├── bin

├── cmakelists.txt

└── src

└── main.c

├── cmakelists.txt

當然當前目錄下的cmakelists.txt內容也需要變化(src目錄下的cmakelists.txt內容為空):

project(hello)

add_subdirectory(src)

aux_source_directory(./src dir_srcs)

add_executable(hello $

你會發現多了一行add_subdirectory(src ),其中add_subdirectory()的引數是源**存放的資料夾。

然後我們執行編譯命令:cmake .,然後你會發現bin這個資料夾裡面多了很多內容。接下來我們只需要進入到bin這個資料夾執行make命令來生成可執行檔案。

現在我們在案例2的基礎上在src目錄下增加一a.h標頭檔案。

.

├── bin

├── cmakelists.txt

└── src

└── main.c

├── a.h

├── cmakelists.txt

然後src/cmakelists.txt這個檔案此時需要增加內容了:

aux_source_directory(. lib_files)       # 這個表示獲取當前src目錄下所有檔名並存入lib_files這個變數中

add_library(libs $) # 這個表示將$這些檔案加入庫中,然後並且複製乙份到libs這個變數中

專案根目錄下的cmakelists.txt的檔案內容也需要改動:

project(hello)

aux_source_directory(./src dir_srcs)

add_executable(hello $)

target_link_libraries(hello $) # 向可執行檔案hello提供鏈結庫libs是前面提到的變數

cmake編譯生成中間**,以及make編譯生成目標可執行檔案和前面的操作一樣。都是回到專案根目錄下:

輸入:

$ cmake .

$ make

參考文獻:

[1]

ubuntu下安裝cmake及cmake簡單使用

前言 最近突然想將開發環境轉移到linux上,同時也準備閱讀些github上的開源 發現現在開源專案一般都是用cmake管理的。所以就在自己的虛擬機器上搗鼓了一天。一開始我也不知道cmake是啥,後來通過折騰也大概知道其作用,它所做的事其實就是告訴編譯器如何去編譯鏈結源 你也許想問不是有makefi...

Linux下CMake 安裝教程

cmake是乙個跨平台的自動化建構系統 其使用乙個名為 cmakelists.txt 的檔案來描述構建過程,可以產生標準的構建檔案,如 unix 的 makefile 或windows visual c 的 projects workspaces 檔案 cmakelists.txt 需要手工編寫,也...

CMake Linux下CMake示例教程

cmake是乙個跨平台的 開源的構建工具。cmake是makefile的上層工具,它們的目的正是為了產生可移植的makefile,並簡化自己動手寫makefile時的巨大工作量.目前很多開源的專案都可以通過cmake工具來輕鬆構建工程。sudo apt get install cmake ubunt...