2021-05-12 14:32:11
CMake基礎教學
如果需要設定和檢查我們工程中的所有依賴,那麼可以選用CMake工具;但是,這並不是必須的,因為我們可以使用其他的工具或者是IDE(比如Makefiles或者Visual Studio)來設定我們的工程。然而,CMake是最好移植的方式來設定多平台的C++專案。
1. 基本用法
CMake使用名稱為CMakeLists.txt的檔案,其中定義了編譯和依賴處理等過程。對於一個基本的專案而言,從一個原始碼檔案構建一個可執行程式只需要中CMakeLists.txt檔案中新增兩行程式碼即可。檔案內容像下面這樣:
cmake_minimum_required (VERSION 2.6) project (CMakeTest) add_executable (${PROJECT_NAME} main.cpp)
檔案的第一行定義了所需的CMake版本的最小值,這一行是強制新增在CMakeLists.txt檔案中,其擁有指定了從第二行開始可以使用的給定版本所定義的cmake函數;第二行的project函數用於定義工程名(這裡為CMakeTest),這個名字被儲存在一個名為PROJECT_NAME的變數中。最後一行,在main.cpp檔案中建立一個可執行命令(add_executable()),它的名字和工程名稱(${PROJECT_NAME})相同,然後將原始碼編譯到名稱為CMakeTest的可執行檔案中,也就是將可執行檔名設定為與工程名相同。${}表示式允許存取環境中定義的任何變數,因此,我們可以使用${PROJECT_NAME}變數作為一個可執行程式的輸出名。假設這裡的main.cpp檔案是一個簡單的Hello World程式,程式碼如下:
#include <iostream> using namespace std; int main(int argc, char *argv[]) { cout << "Hello World! " << argc << argv[0] << endl; return 0; }
將這兩個檔案放置在同一目錄下,然後依次執行如下命令:
cmake . make
這樣,我們就可以在當前目錄下面看到一個名稱為CMakeTest的可執行檔案了。
2. 建立庫檔案(Creating a library)
CMake允許你建立庫檔案,可以被OpenCV編譯系統使用。軟體開發過程中,在多個應用之間共用程式碼是一種通用並且實用的實踐。在大型應用中,或者是當相同的程式碼在多個應用中共用時,這種使用方式非常有用。
在這種情況下,我們不需要建立一個二進位制可執行檔案;取而代之,我們建立一個編譯好的檔案,其中包含了所有的函數、類等等,使用它來開發。我們可以將這個庫檔案與其它應用共用,而不需要共用我們的原始碼。CMake中包含了一個add_library()函數來實現此目的:
# Create our hello library add_library(Hello hello.cpp hello.h) # Create our application that uses our new library add_executable(executable main.cpp) # Link our executable with the new library target_link_libraries(executable Hello)
以“#”開頭的行為註釋行,這些行會被CMake忽略掉。
命令add_library(Hello hello.cpp hello.h)定義了我們新建立的庫的名稱,庫名稱為Hello,而hello.cpp和hello.h是庫的原始檔。我們新增標頭檔案以允許IDE連結到這些標頭檔案。執行這一行命令將會產生一個共用檔案(在OS X或者Unix下生成一個*.so檔案,在Windows下生成*.dll檔案),這取決於我們所使用的作業系統,或者是要建立動態庫還是靜態庫。
target_link_libraries(executable Hello)用於連結我們的可執行檔案executable到目標庫,在這裡,將會連結到Hello庫中。
假設我們在hello.cpp中定義一個say()函數用於輸出字串,在hello.h檔案中新增此函數的宣告:
#ifndef __HELLO_H__ #define __HELLO_H__ #include <string> void say(std::string text); #endif
然後,我們在main.cpp中新增hello.h標頭檔案宣告,然後參照Hello庫中定義的say()函數,程式碼如下:
最後,依次執行“cmake .”和“make”命令,就可以看到最終生成的可執行檔案了,點選執行檢視效果。
3. 管理依賴(Managing dependencies)
CMake具有搜尋我們的依賴檔案以及外部庫的能力,它為我們提供了編譯複雜工程的基礎設施,
4. 讓指令碼更複雜(Making the script more complex)
在這一節
使用cmake編譯安裝MySQL 5.5 http://www.linuxidc.com/Linux/2015-12/126541.htm
CMake快速使用教學 http://www.linuxidc.com/Linux/2015-10/124447.htm
Ubuntu 12.04利用CMake-2.8.10.4編譯OpenCV-2.4.4 http://www.linuxidc.com/Linux/2014-04/100113.htm
CMake並沒有想象中好用 http://www.linuxidc.com/Linux/2014-03/98799.htm
CMake 設定交叉編譯環境 http://www.linuxidc.com/Linux/2014-03/98622.htm
MySQL編譯安裝 之 CMake http://www.linuxidc.com/Linux/2013-09/90113.htm
基於CMake編譯安裝MySQL 5.5 http://www.linuxidc.com/Linux/2013-04/83579.htm
相關文章