日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

在Ubuntu18.04下的Cmake使用记录

發(fā)布時(shí)間:2023/11/27 生活经验 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在Ubuntu18.04下的Cmake使用记录 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。