在Ubuntu18.04下的Cmake使用记录
(1)首先是安裝cmake。命令如下:
sudo apt-get install cmake
(2)創(chuàng)建一個(gè)源程序,1.cpp如下:(1.cpp的位置是位于hoem/ysh/code)
#include <iostream>
using namespace std;
int main()
{cout<<"hello slam"<<endl;return 0;
}
(3)使用cmake首先得有個(gè)CMakeList.txt文件,你需要把配置信息寫在該文件中,然后通過cmake去處理該文件。在源程序同一個(gè)目錄下創(chuàng)建CMakeLists.txt文件:使用vim或者gedit
vim CMakeLists.txt
//或者
gedit CMakeLists.txt
CMakeList.txt文件內(nèi)容:
第一句是要求的cmake最低版本;第二句是隨便指定一個(gè)工程名稱,也可以叫demo1;第三句是把源文件生成可執(zhí)行文件(第一個(gè)名字可以自己指定,第二個(gè)是你所要生成可執(zhí)行文件的依賴,什么是依賴呢?就是源文件,你要依賴源文件才能生成可執(zhí)行文件)。
# CMake 最低版本號(hào)要求
cmake_minimum_required (VERSION 2.8)# 項(xiàng)目名稱
project (Demo)# 指定生成目標(biāo),使用main.cpp生成可執(zhí)行文件Demo
add_executable(Demo main.cpp)
如下是CMakeLists.txt的內(nèi)容:
cmake_minimum_required (VERSION 2.8)
project (Demo)
add_executable(Demo 1.cpp)
現(xiàn)在在這個(gè)code目錄文件下只有一個(gè)源程序1.cpp和CMakeLists.txt兩個(gè)。
(4)執(zhí)行命令:(現(xiàn)在在當(dāng)前目錄,調(diào)用cmake對(duì)該工程進(jìn)行cmake編譯)
cmake .
該指令最后有一個(gè).點(diǎn)符號(hào),一定不要忘記(點(diǎn)就表示在當(dāng)前目錄,在當(dāng)前目錄執(zhí)行cmake),這表示在當(dāng)前目錄下進(jìn)行cmake。
這個(gè)命令執(zhí)行之后會(huì)增加如下文本:
12345是執(zhí)行完命令新增加的中間文件。
再查看一下1下邊的內(nèi)容有哪些:
執(zhí)行完cmake之后,會(huì)生成Makefile文件,ls命令查看一下有一個(gè)Makefile文件,我們對(duì)他進(jìn)行直接make就行了。
(5)執(zhí)行如下命令:
make
注意觀察一下該命令執(zhí)行之后終端的輸出。(前邊的百分比是編譯進(jìn)度)
make之后,再ls查看會(huì)有一個(gè)綠色的Demo可執(zhí)行性文件,下邊再執(zhí)行Demo就行了。
(6)執(zhí)行如下命令(在編譯過程中會(huì)輸出一個(gè)編譯進(jìn)度,如果順利通過我們就可以得到CMakeLists.txt聲明的那個(gè)可執(zhí)行程序Demo。然后執(zhí)行它,如下)
./Demo
到此為止一個(gè)簡單的cpp文件就執(zhí)行完畢了。
現(xiàn)在我們執(zhí)行完cmake之后,會(huì)在目錄下增加上述12345這么多個(gè)中間文件。所以在執(zhí)行cmake命令之前先在該目下建立一個(gè)文件,用于存放這些中間文件。
(1)(2)(3)步驟不變。
(4)在code目錄下執(zhí)行命令:
mkdir build
該命令會(huì)在code目錄下新建立一個(gè)build文件夾。
(5)進(jìn)入上述建立的build目錄。命令如下:
cd build
(6)在新建立的文件夾下執(zhí)行如下命令:
cmake ..
終端執(zhí)行結(jié)果如下:
查看CMakeFiles文件下的內(nèi)容:
(7)再執(zhí)行如下命令:
make
終端執(zhí)行結(jié)果:
CMakeFiles文件下內(nèi)容變化:
(8)最后執(zhí)行如下命令:
./Demo
終端輸出結(jié)果如下:
---------------------------------------------------上述是簡單的只有一個(gè)main函數(shù)的1.cpp文件------------------------------
-------------------------------------進(jìn)階-------------------------------
在一個(gè)C++工程中,并不是所有代碼都會(huì)編譯成可執(zhí)行文件,只有帶有main函數(shù)的文件才會(huì)生成可執(zhí)行程序,而另一些代碼,我們只想把他打包成一個(gè)東西,供其他程序調(diào)用,這個(gè)東西叫做庫(library)。
一個(gè)庫往往是許多算法、程序的集合。會(huì)在之后的練習(xí)中接觸到許多庫,如opencv庫提供了許多計(jì)算機(jī)視覺相關(guān)的算法,而Eigen庫提供了矩陣代數(shù)的計(jì)算,因此我們要學(xué)習(xí)如何用cmake生成庫,并且使用庫中的函數(shù)。接下來演示如何自己編寫一個(gè)庫:
(1)在code目錄下邊建立一個(gè)cpp文件libhello.cpp
//這是一個(gè)庫文件
#include <iostream>
using namespace std;
void printHello()
{cout<<"Hello SLAM"<<endl;
}
這個(gè)庫提供了一個(gè)printHello函數(shù),調(diào)用此函數(shù)將輸出一條信息Hello SLAM,但是他沒有main函數(shù),這意味著這個(gè)庫中沒有可執(zhí)行文件,我們在上述存在main函數(shù)的基礎(chǔ)上,在CMakeLists.txt里加上如下內(nèi)容:
(2)在code目錄下邊添加一個(gè)CMakeLists.txt的文件,CmakeLists.txt的內(nèi)容如下:
# CMake 最低版本號(hào)要求
cmake_minimum_required (VERSION 2.8)# 項(xiàng)目名稱
project (Demo)# 指定生成目標(biāo),使用main.cpp生成可執(zhí)行文件Demo
add_executable(demo 1.cpp)
#告訴cmake,把這個(gè)文件編譯成一個(gè)叫做hello的庫
add_library(hello libhello.cpp)
add_library(hello libhello.cpp)這個(gè)告訴cmake,我們想把這個(gè)文件編譯成一個(gè)叫做“hello”的庫,然后和上邊一樣使用cmake編譯整個(gè)工程。
(3)在code目錄下邊建立一個(gè)build文件夾,并進(jìn)入build該目錄:
(4)執(zhí)行命令如下:
cmake ..
查看build目錄下增加的內(nèi)容:
(5)執(zhí)行命令如下:
make
查看執(zhí)行完make命令后,build目錄下新增加的內(nèi)容:
這時(shí)build文件夾中就會(huì)生成一個(gè)libhello.a文件,這就是我們得到的庫。
add_library(hello_shared SHARED libhello.cpp)
此時(shí)得到的文件就是:libhello_shared.so。
下面記錄庫的使用方法。
(6)最后執(zhí)行命令
./Demo
輸出結(jié)果:
上述雖然連接了庫,但是沒有使用,開始記錄如何使用庫:
(1)在code目錄下建立一個(gè)庫的.cpp文件libmy.cpp
//libmy.cpp
//這是一個(gè)庫文件
#include <iostream>
using namespace std;
void printHello()
{cout<<"Hello SLAM"<<endl;
}
(2)在code目錄下建立一個(gè)頭文件的.h文件libmy.h
#ifndef LIBMY_H_
#define LIBMY_H_
//上面的宏定義是為了防止重復(fù)引用這個(gè)頭文件而引起的重定義錯(cuò)誤//打印一句hello的函數(shù)
void printHello()
#endif
(3)有了頭文件,和庫文件就可以使用printHello()函數(shù)了。所以在code目錄下寫一個(gè)可執(zhí)行程序uselibmy.cpp來調(diào)用這個(gè)printHello()函數(shù)。
#include "libmy.h"
//使用libmy.h中的printHello()函數(shù)。
int main(int argc,char **argv)
{printHello();return 0;
}
(4)在code目錄下建立CMakeLists.txt內(nèi)容和build文件夾。CMakeLists.txt的內(nèi)容如下:
# CMake 最低版本號(hào)要求
cmake_minimum_required (VERSION 2.8)# 項(xiàng)目名稱
project (Demo)# 指定生成目標(biāo),使用uselibmy.cpp生成可執(zhí)行文件uselib
add_executable(uselib uselibmy.cpp)
#告訴cmake,把這個(gè)文件編譯成一個(gè)叫做lib_shared的庫
add_library(lib_shared SHARED libmy.cpp)
#uselib程序就能順利使用lib_shared庫中的代碼了
target_link_libraries(uselib,lib_shared)
(5)執(zhí)行命令如下:
cmake ..
(6)執(zhí)行命令
make
?
總結(jié)
以上是生活随笔為你收集整理的在Ubuntu18.04下的Cmake使用记录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu18.04:错误整理
- 下一篇: 机器学习中的梯度下降( Gradient