一隻蝦和cmake的初次相遇
阿新 • • 發佈:2018-11-27
用於Ubuntu下用gedit寫程式碼,不使用IDE
原始思路
- 用gedit編輯好程式碼
- g++編譯
- 執行
例項
新建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思路
- gedit編輯好程式碼
- CMakeLists編輯(相當於g++的命令,但有自己的語法)
- cmake出編譯資訊,make進行編譯
- 執行
修改上述例項
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函式的檔案),對於庫檔案:
- gedit編輯好程式碼檔案
- CMakeLists中新增庫
- 編輯標頭檔案,對庫檔案中的函式進行說明
- 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,水平有限,文章若有錯誤,歡迎指正!