如果需要配置和檢查我們工程中的所有依賴,那麼可以選用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文件中添加此函數的聲明:
1 #include <iostream>#ifndef __HELLO_H__ #define __HELLO_H__ #include <string> void say(std::string text); #endifhello.h
然後,我們在main.cpp中添加hello.h頭文件聲明,然後引用Hello庫中定義的say()函數,代碼如下:
1 #include "hello.h"最後,依次執行“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