1. 程式人生 > >一隻蝦和cmake的初次相遇

一隻蝦和cmake的初次相遇

用於Ubuntu下用gedit寫程式碼,不使用IDE

  • 原始思路

    1. 用gedit編輯好程式碼
    2. g++編譯
    3. 執行
  • 例項
    新建HelloWorld.cpp檔案,鍵入下面簡單的程式碼片

#include <iostream>
using namespace std;
int main()
{   cout<<"Hello World!"<<endl;
return 0;
}

終端中cd到當前資料夾,輸入以下指令進行編譯
g++ HelloWorld.cpp

可以看到生成了一個a.out的檔案,輸入以下指令執行
./a.out


在終端中輸入a.out會提示無此命令,通常執行可執行檔案要連帶資料夾,./表示當前資料夾
雖然成功執行,但工程較大時,g++編譯指令將十分複雜,因此採用cmake方法,它根據makefile來進行編譯

  • cmake思路

    1. gedit編輯好程式碼
    2. CMakeLists編輯(相當於g++的命令,但有自己的語法)
    3. cmake出編譯資訊,make進行編譯
    4. 執行
  • 修改上述例項
    HelloWorld.cpp不變;新建CMakeLists.txt檔案,鍵入下述程式碼片

#版本要求
cmake_minimum_requred(VERSION 2.8
) #宣告工程 project(MyHello) #新增可執行程式 add_executable(welcome HelloWorld.cpp)

儲存後,在存放有CMakeLists.txt的資料夾裡cmake, make
即可完成編譯過程,並且得到可執行程式,仍用上面提到的‘./檔名’方式來執行

cmake .
make
./welcome

可以看到,編譯過程中生成了一些中間檔案,這些是可以不需要的,因此,新建一個build資料夾,用來存放編譯生成的中間檔案,操作如下:

#新建build資料夾並進入
mkdir build
cd build

#編譯上層目錄(因為CMakeLists在上層)
cmake .. make ./welcome

一個工程中,有可執行檔案和庫檔案(即不含main函式的檔案),對於庫檔案:

  1. gedit編輯好程式碼檔案
  2. CMakeLists中新增庫
  3. 編輯標頭檔案,對庫檔案中的函式進行說明
  4. main函式中新增標頭檔案

例如新建如下程式碼片,命名為LibHelloWorld.cpp

#include <iostream>
using namespace std;
void libprint()
{
cout<<"We use library to print 'Hello World'"<<endl;
}

在CMakeLists.txt中新增add_library(libHelloWorld LibHelloWorld.cpp)
並將庫libHelloWorld連結到可執行程式welcome中target_link_libraries(welcome libHelloWorld)
(注意格式哦~有興趣的話可以看看cmake的語法^^)

新建LibHelloWorld.h標頭檔案

#ifndef LIBHELLOWORLD_H_
#define LIBHELLOWORLD_H_
void libprint();
#endif

再在主程式HelloWorld.cpp中新增#include 'LibHellowWorld.h'
大功告成!

mkdir build
cd build
cmake ..
make
./welcome

即可實現輸出不同函式的hello world啦~
本人初始cmake,水平有限,文章若有錯誤,歡迎指正!