歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> CMake基礎教程

CMake基礎教程

日期:2017/2/28 13:52:07   编辑:Linux教程

如果需要配置和檢查我們工程中的所有依賴,那麼可以選用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>
2 #include "hello.h"
3
4 void say(std::string text)
5 {
6 std::cout << text << std::endl;
7 } hello.cpp
#ifndef __HELLO_H__
#define __HELLO_H__
#include <string>
void say(std::string text);
#endif
hello.h

  然後,我們在main.cpp中添加hello.h頭文件聲明,然後引用Hello庫中定義的say()函數,代碼如下:

1 #include "hello.h"
2
3 int main()
4 {
5 say("I can say Hello!");
6 return 0;
7 } main.cpp

  最後,依次執行“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

Copyright © Linux教程網 All Rights Reserved