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

    歡迎訪問 生活随笔!

    生活随笔

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

    生活经验

    CMake结合PCL库学习(2)

    發(fā)布時(shí)間:2023/11/27 生活经验 27 豆豆
    生活随笔 收集整理的這篇文章主要介紹了 CMake结合PCL库学习(2) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

    緊接著上一篇文章

    對(duì)于PCL 庫中的各個(gè)模塊之間是有相互依賴關(guān)系的

    其中Common模塊是最基礎(chǔ)的模塊,其中是定義各種數(shù)據(jù)結(jié)構(gòu)的頭文件,所以Common這個(gè)模塊是不需要依賴性響的,但是IO 模塊就是需要common和Octree兩大模塊的支持,這時(shí)候應(yīng)該怎么引用他們的依賴項(xiàng)呢,這里就需要講解如何讓構(gòu)建靜態(tài)庫與動(dòng)態(tài)庫了,那么靜態(tài)庫和動(dòng)態(tài)庫一般是提供各種函數(shù)以供其他編程算法的實(shí)現(xiàn),

    這里首先給一個(gè)簡單的說明建立一個(gè)工程文件需要的CMAKE建立的方式“

    (1)新建一個(gè)文件夾HEllo_cmake文件

    (2)首先建立include 文件建立頭文件libHelloCMAKE.h文件:

    #ifndef LIBHELLOCMAKE_H_
    #define LIBHELLOCMAKE_H_
    // 上面的宏定義是為了防止重復(fù)引用這個(gè)頭文件而引起的重定義錯(cuò)誤void printHello();#endif
    

    3)建立src文件,新建libHelloCMAKE.cpp,該函數(shù)就是實(shí)現(xiàn).h文件中申明的void printHello(); 函數(shù),具體內(nèi)容如下:

    //這是一個(gè)實(shí)現(xiàn)代碼功能的函數(shù)
    #include <iostream>
    using namespace std;
    void printHello()
    {cout<<"Hello CMake"<<endl;
    }
    

    (4)新建main文件,該文件是是建立主函數(shù) 實(shí)現(xiàn)我們的上面寫的打印hello CMAKE函數(shù),新建useHello.cpp文件 :

    #include "libHelloCMAKE.h"// 使用 libHelloCMAKE.h 中的 printHello() 函數(shù)
    int main( int argc, char** argv )
    {printHello();return 0;
    }
    

    (4)接下來就是如果寫cmake文件進(jìn)行編譯生成動(dòng)態(tài)鏈接庫,以及寫一個(gè)函數(shù)應(yīng)用我們生成的鏈接庫.
    我們?cè)趆ello_cmake文件中新建CMakeList.txt文件,文件內(nèi)容如下:

    # 聲明要求的 cmake 最低版本
    cmake_minimum_required( VERSION 2.8 )# 聲明一個(gè) cmake 工程
    project( Hellocmake)set (CMAKE_CXX_COMPILER "g++")
    # 設(shè)置編譯模式
    set( CMAKE_BUILD_TYPE "Debug" )
    #set (CMAKE_BUILD_TYPE "Release")
    set( CMAKE_CXX_FLAGS "-std=c++11 -march=native -O3" )#這里是添加cmake其他依賴庫的cmake 文件
    #list (APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)#生成可執(zhí)行文件的路徑
    set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build)
    #設(shè)置生成的可鏈接的庫路徑
    set (LIBRAYR_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
    LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/lib)
    #set( THIRD_PARTY_LIBS 
    #   )include_directories (${PROJECT_SOURCE_DIR}/include)
    #添加有cmake的二級(jí)文件
    add_subdirectory(src)
    add_subdirectory(main)
    

    (5)在src中同樣新建CMakeLists.txt 文件內(nèi)容為:

    #############編譯一個(gè)動(dòng)態(tài)鏈接庫###################
    # 添加一個(gè)庫
    add_library( hello libHelloCMAKE.cpp )
    # 共享庫
    add_library( hello_shared SHARED libHelloCMAKE.cpp )
    

    (6)在main文件下新建CMakeLists.txt ,文件內(nèi)容:

    # 添加一個(gè)可執(zhí)行程序
    # 語法:add_executable( 程序名 源代碼文件 )
    add_executable( useHello useHello.cpp )
    # 將庫文件鏈接到可執(zhí)行程序上
    target_link_libraries( useHello hello_shared )
    #或者可以寫為
    #target_link_libraries(useHello libhello_shared.so)
    

    (7)這時(shí)候一個(gè)工程文件就已經(jīng)建立了,我們需要編譯即可:
    在hello_cmake文件下執(zhí)行以下命令:
    mkdir build
    cd build
    cmake …
    make
    執(zhí)行的結(jié)果:

    可以看到我們已經(jīng)生成了動(dòng)態(tài)的鏈接庫文件libhello_shared.so
    以及靜態(tài)鏈接庫libhello.a
    可以直接運(yùn)行程序

    如何通過 INCLUDE_DIRECTORIES 指令加入非標(biāo)準(zhǔn)的頭文件搜索路徑。
    如何通過 LINK_DIRECTORIES 指令加入非標(biāo)準(zhǔn)的庫文件搜索路徑。
    如果通過 TARGET_LINK_LIBRARIES 為庫或可執(zhí)行二進(jìn)制加入庫鏈接。
    以及如何鏈接到靜態(tài)庫。

    關(guān)于CMake中的一些常用變量:

    (1)CMAKE_SOURCE_DIR , PROJECT_SOURCE_DIR ,_SOURCE_DIR 都代表這工程的頂層目錄

    (2)CMAKE_CURRENT_SOURCE_DIR 指的是當(dāng)前處理的 CMakeLists.txt 所在的路徑

    (3)CMAKE_CURRENT_LIST_FILE 輸出調(diào)用這個(gè)變量的 CMakeLists.txt 的完整路徑

    (4)CMAKE_MODULE_PATH
    這個(gè)變量用來定義自己的 cmake 模塊所在的路徑。如果你的工程比較復(fù)雜,有可能會(huì)自己 編寫一些 cmake 模塊,這些 cmake 模塊是隨你的工程發(fā)布的,為了讓 cmake 在處理
    CMakeLists.txt 時(shí)找到這些模塊,你需要通過 SET 指令,將自己的 cmake 模塊路徑設(shè) 置一下。
    比如 SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) 這時(shí)候你就可以通過 INCLUDE 指令來調(diào)用自己的模塊了。這種定義CMAKE模塊的方式在PCL中也是有的
    (5)EXECUTABLE_OUTPUT_PATH 和 LIBRARY_OUTPUT_PATH 分別用來重新定義最終結(jié)果的存放目錄,前面我們已經(jīng)提到了這兩個(gè)變量。
    (6)ROJECT_NAME 返回通過 PROJECT 指令定義的項(xiàng)目名稱。

    CMAKE中調(diào)用環(huán)境變量的方式
    (1) 設(shè)置環(huán)境變量的方式是: SET(ENV{變量名} 值) 比如上面的例子就有用到
    (2)CMAKE_INCLUDE_CURRENT_DIR 自動(dòng)添加 CMAKE_CURRENT_BINARY_DIR 和 CMAKE_CURRENT_SOURCE_DIR 到當(dāng)前處理
    的 CMakeLists.txt。相當(dāng)于在每個(gè) CMakeLists.txt 加入: INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})

    CMAKE中的開關(guān)選項(xiàng)
    (1)CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS,用來控制 IF ELSE 語句的書寫方式
    (2)BUILD_SHARED_LIBS 這個(gè)開關(guān)用來控制默認(rèn)的庫編譯方式,如果不進(jìn)行設(shè)置,使用 ADD_LIBRARY 并沒有指定庫 類型的情況下,默認(rèn)編譯生成的庫都是靜態(tài)庫。 如果 SET(BUILD_SHARED_LIBS ON)后,默認(rèn)生成的為動(dòng)態(tài)庫。
    (3)CMAKE_C_FLAGS 設(shè)置 C 編譯選項(xiàng),也可以通過指令 ADD_DEFINITIONS()添加。
    (4)CMAKE_CXX_FLAGS 設(shè)置 C++編譯選項(xiàng),也可以通過指令 ADD_DEFINITIONS()添加。
    這是一個(gè)簡單的建立CMake的工程教程,接下來將會(huì)詳細(xì)介紹PCL 中的更多內(nèi)容

    以上內(nèi)容如有錯(cuò)誤或者需要補(bǔ)充的,請(qǐng)留言!同時(shí)歡迎大家關(guān)注微信公眾號(hào),積極分享投稿,做到大家一起分享,拒絕只做個(gè)伸手黨!或者加入3D視覺微信群或QQ交流群,一起交流分享! 投稿或聯(lián)系群主郵箱:dianyunpcl@163.com原創(chuàng)不易,轉(zhuǎn)載請(qǐng)聯(lián)系群主,注明出處

    總結(jié)

    以上是生活随笔為你收集整理的CMake结合PCL库学习(2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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