CMake 使用

一起學習CMake

 本節介紹CMake裏最常用的三個命令,分別是cmake_minimum_required; project; add_executable等。

CMake是個好東西,在使用VTK, ITK, IGSTK, OpenCV, DCMTK等開源工具包時,是離不開CMake的,甚至有時你使用 FLTK , Qt等界面開發工具時,也經常會看到CMake,你會發現在好多目錄下會有一個文件”CMakeLists.txt”,這個文件就是使用CMake構建工程環境的重要文件。瞭解一點關於CMake的內容,對使用以上提到的一些開源工具包是灰常有幫助的,而且你會發現,CMake用久了,你會覺得它是很可愛很好用的東西。

如果你檢索到了我關於CMake的這些文章時,我是假定你已經對CMake的作用有所瞭解。下面我們從最簡單的入手來看看CMake怎麼使用:寫一個HelloCMake.cpp文件,裏面就簡單地輸出一行字符串:”Study CMake Together - Hello CMake!”,一起看看怎麼用CMake來構建工程。

首先,在使用CMake之前請先從CMake網站(http://www.cmake.org)上下載最新版的安裝文件並在你的機子上安裝,你也可以下載CMake源碼,然後在你機子上編譯;對於使用CMake的童鞋,建議用傻瓜式安裝方式就行了(這裏所做的例子全是在Windows 7平臺上的。)

然後,還要確保你的機子已經安裝了一種編譯器,我機子上安裝的是VS2008。你也可以選擇其他編譯器,建議用VS2008或以上版本的,個人覺得比較好用。

接着在你機子的某個盤裏建一個新的文件夾,如我這裏的完整路徑是:D:\CMake\CMake-Study\HelloCMake; 然後在HelloCMake文件夾裏建立一個HelloCMake.cpp文件,裏面的代碼如下:(禁止中文路徑)

#include <iostream>

int main()

{

  std::cout<<"Study CMake Together - Hello CMake!"<<std::endl;

  return 0;

}

然後在HelloCMake文件夾裏建立一個CMakeLists.txt文件,注意文件名不能是別的,必須叫這個名字。裏面的內容如下:

cmake_minimum_required(VERSION 2.6)

         project(HelloCmake)

         add_executable(HelloCMake hellocmake.cpp)

接着在HelloCMake的同級目錄裏建立一個新的文件夾,就叫做HelloCMake-bin,在我機子上的完整路徑是:D:\CMake\CMake-Study\HelloCMake-bin,你可以針對自己的目錄路徑對號入座。

然後打開CMake程序,界面如圖(1):

 

 圖(1)                                   

 圖(2)

接着把包含CMakeLists.txt和HelloCMake.cpp文件的完整路徑給”where is the source code”,把最後建立的HelloCMake-bin目錄的完整路徑給”where to build the binaries”,然後按Cofigure,界面如圖(2)。

Configure完了以後,再按Generate,直到所有的紅色選項都變成灰色爲止。界面如圖(3)。然後打開HelloCMake-bin,你會發現原來空的文件夾裏面自動生成了好多文件,如圖(4)。

  

圖(3) 

 

  圖(4)

到此爲止,工程構建完成,打開HelloCMake-bin目錄下的HelloCMake.sln,裏面有三個工程,分別是:ALL_BUILD;HelloCMake;ZERO_CHECK。這三個工程的大概作用如下(個人理解而已),HelloCMake就不用說了,自己要建立的那個工程;ALL_BUILD是管理整個項目的工程;ZERO_CHECK是實時監視CMakeLists.txt文件變化的工程,一旦CMakeLists.txt裏的內容發生了任何變化,ZERO_CHECK就會告訴編譯器要重新構建整個工程環境。所以,你可以先把工程關掉,打開CMakeLists.txt文件,更改裏面的內容以後,把根據以上說的步驟走一遍CMake;你也可以在編譯器環境(如VS2008)中更改CMakeLists.txt文件,然後直接F7編譯工程。如果你選擇後者,你會發現如圖(5)所示的現象發生。

因爲你改變了CMakeLists.txt的內容,工程的環境要重新構建、設置。所以你必須加載新的工程環境設置。點Yes,然後點Reload。重新加載設置過的工程環境。

另外一個經常看某些童鞋問的,就是當彈出圖(6)所示的界面時要怎麼辦?能怎麼辦?界面上提示已經灰常清楚了,指定exe的路徑給它,然後點OK就可以了;出現這種情況的原因是你把沒有生成exe可執行文件的工程設爲啓動工程了,如圖(6)所示,你會發現ALL_BUILD這個工程名字是黑體顯示的,表示它是啓動工程;或者你把生成exe可執行文件的工程,如這裏的HelloCMake右擊->設置爲啓動工程,也不會出現如圖(6)所示的界面。

好,這些比較瑣碎的東西介紹完,我們一起來看看CMakeLists.txt裏面的代碼表示什麼意思,爭取每句代碼都作解釋,如果有不對的地方,一定要告訴我!

圖(5)
 圖(6)

把CMakeLists.txt裏的內容再羅列出來:

1. cmake_minimum_required(VERSION 2.6)

         2. project(HelloCmake)

         3. add_executable(HelloCMake hellocmake.cpp)

第1行,cmake_minimum_required(VERSION 2.6)這是對CMake版本的要求,基本上每個CMakeLists.txt文件裏都會有這句代碼,cmake_minimum_required是cmake裏的命令,可大寫小寫。VERSION這個關鍵字必須是大寫,而且不能省略;2.6就是CMake的版本號,現在的版本是2.8.3。

第2行,project(HelloCmake),project也是CMake的命令,裏面的參數HelloCMake是你要生成的工程的名字,換句話說就是生成的***.sln或者***.dsw等工程項目文件的名字。

第3行,add_executable(HelloCMake hellocmake.cpp),add_executable同樣是CMake的命令,鏈接有關的源文件,然後生成exe可執行文件,這是這個命令的作用。第一個參數是生成的exe文件的文件名,一般與project裏的工程名一致,這樣編譯生成的文件就分別是HelloCMake.sln和HelloCMake.exe,當然也可以不一樣。Add_executable()後面的是一個參數列表,可帶多個要編譯的文件名,中間以空格或回車等隔開,如可以加入:

add_executable(HelloCMake hellocmake.cpp hellocmake.h)

這樣就把CMake裏最常用的三個命令介紹完了,分別是cmake_minimum_required; project; add_executable等,關於這三個命令的完整參數列表可以參考http://www.cmake.org網站上的東西,也可以從http://vislabproject.googlecode.com/svn/trunk/CMake/下載CMake入門的一些英文資料。

 轉載請註明出處。

原文:http://blog.163.com/jacky_ling0/blog/static/1373925712011072375418/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章