首先當然得安裝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...