CMKAE簡單實用指南

CMake is an open-source, cross-platform family of tools designed to build, test and package software. CMake is used to control the software compilation process using simple platform and compiler independent configuration files, and generate native makefiles and workspaces that can be used in the compiler environment of your choice. The suite of CMake tools were created by Kitware in response to the need for a powerful, cross-platform build environment for open-source projects such as ITK and VTK.html

1. 簡單文件結構和實現流程ios

咱們使用的工程文件結構以下,工程文件夾名爲 cmaketest c++

~/cmaketest $ tree
.
├── build
├── CMakeLists.txt
├── data
├── libs
├── result
└── src
    └── main.cc

其中 main.cc 文件和 CMakeLists.txt 文件以下展現。 CMakeLists.txt 文件用於告訴 cmake 咱們要對這個目錄下的文件進行什麼操做, CMakeLists.txt 文件的內容須要遵照 cmake 的語法。這裏展現的一個最基本的用法,經過註釋很容易理解。併發

 1 // cmaketest/src/main.cc
 2 #include <iostream>
 3 
 4 using namespace std;
 5 
 6 int main(int argc, char** argv) {
 7 
 8         cout << "Hello world!" << endl;
 9         return 0;
10 }
main.cc
 1 # cmaketest/CMakeLists.txt for the project
 2 
 3 # 聲明要求的 cmake 最低版本要求
 4 cmake_minimum_required( VERSION 2.8 )
 5 
 6 # 聲明一個 cmake 工程
 7 project( cmaketest )
 8 
 9 # 添加一個可執行程序
10 # 基本語法:add_executable( 程序名 源代碼文件 )
11 add_executable( cmaketest ./src/main.cc )
CMakeLists.txt

而後進入進行編譯,注意因爲咱們的 CMakeLists.txt 文件在工程文件的一級目錄下,而此時咱們在二級目錄 build 文件夾下,須要將路徑設爲 CMakeLists.txt 所在的路徑,所以使用的 cmake .. 的命令。ide

cmake 會輸出一些編譯信息,而後在當前目錄生成一些中間文件,其中最重要的是 Makefile。因爲 Makefile 是自動生成的,咱們沒必要修改它,直接 make 對工程進行編譯便可。編譯過程會輸出一個編譯進度,若是順利經過,咱們就可獲得在 CMakeLists.txt 中聲明的可執行文件 cmaketest ,在命令行輸入可執行文件的文件名使其運行。函數

$ cd build
$ cmake ..
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/cv/cmaketest/build
$ make
Scanning dependencies of target cmaketest
[ 50%] Building CXX object CMakeFiles/cmaketest.dir/src/main.cc.o
[100%] Linking CXX executable cmaketest
[100%] Built target cmaketest
$ ./cmaketest
Hello world!

這裏咱們使用的cmake-make方式對工程進行編譯,cmake過程處理了工程文件之間的關係,而make過程實際上調用了g++來編譯程序,使得咱們對項目的編譯管理工做,從輸入一串g++命令,變成了維護若干個比較直觀的CMakeLists.txt文件,這明顯下降了維護整個工程的難度。ui

並且當咱們想要發佈源代碼時,通常都不但願把文件編譯和運行的中間文件一併發佈,所以咱們這裏建了一個名爲build的目錄,將編譯和運行過程當中產生的中間文件和緩衝文件與源代碼很好地隔離開來,發佈源碼時,直接將改文件夾刪掉便可,方便快捷。spa

2. 調用工程目錄下子文件夾下的頭文件命令行

在libs文件夾下新建func.h和func.cc兩個庫文件,並在main.cc中調用其中定義的函數,三個文件的源代碼內容以下。code

~/cmaketest $ tree
.
├── build
├── CMakeLists.txt
├── data
├── libs
│   ├── func.cc
│   └── func.h
├── result
└── src
    └── main.cc

其中main.cc以及func.h和func.cc文件內容以下所示。

Reference

[1] cmake 添加頭文件目錄,連接動態、靜態庫

相關文章
相關標籤/搜索