對於PCL 庫中的各個模塊之間是有相互依賴關係的ios
其中Common模塊是最基礎的模塊,其中是定義各類數據結構的頭文件,因此Common這個模塊是不須要依賴性響的,可是IO 模塊就是須要common和Octree兩大模塊的支持,這時候應該怎麼引用他們的依賴項呢,這裏就須要講解如何讓構建靜態庫與動態庫了,那麼靜態庫和動態庫通常是提供各類函數以供其餘編程算法的實現,c++
這裏首先給一個簡單的說明創建一個工程文件須要的CMAKE創建的方式「算法
(1)新建一個文件夾HEllo_cmake文件編程
(2)首先創建include 文件創建頭文件libHelloCMAKE.h文件:微信
#ifndef LIBHELLOCMAKE_H_ #define LIBHELLOCMAKE_H_ // 上面的宏定義是爲了防止重複引用這個頭文件而引發的重定義錯誤 void printHello(); #endif
(3)創建src文件,新建libHelloCMAKE.cpp,該函數就是實現.h文件中申明的void printHello(); 函數,具體內容以下:數據結構
//這是一個實現代碼功能的函數 #include <iostream> using namespace std; void printHello() { cout<<"Hello CMake"<<endl; }
(4)新建main文件,該文件是是創建主函數 實現咱們的上面寫的打印hello CMAKE函數,新建useHello.cpp文件 :函數
#include "libHelloCMAKE.h" // 使用 libHelloCMAKE.h 中的 printHello() 函數 int main( int argc, char** argv ) { printHello(); return 0; }
(4)接下來就是若是寫cmake文件進行編譯生成動態連接庫,以及寫一個函數應用咱們生成的連接庫.ui
咱們在hello_cmake文件中新建CMakeList.txt文件,文件內容以下:spa
# 聲明要求的 cmake 最低版本 cmake_minimum_required( VERSION 2.8 ) # 聲明一個 cmake 工程 project( Hellocmake) set (CMAKE_CXX_COMPILER "g++") # 設置編譯模式 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) #生成可執行文件的路徑 set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build) #設置生成的可連接的庫路徑 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的二級文件 add_subdirectory(src) add_subdirectory(main)
(5)在src中一樣新建CMakeLists.txt 文件內容爲:c++11
#############編譯一個動態連接庫###################
# 添加一個庫
add_library( hello libHelloCMAKE.cpp )
# 共享庫
add_library( hello_shared SHARED libHelloCMAKE.cpp )
(6)在main文件下新建CMakeLists.txt ,文件內容:
# 添加一個可執行程序
# 語法:add_executable( 程序名 源代碼文件 )
add_executable( useHello useHello.cpp )
# 將庫文件連接到可執行程序上
target_link_libraries( useHello hello_shared )
#或者能夠寫爲
#target_link_libraries(useHello libhello_shared.so)
(7)這時候一個工程文件就已經創建了,咱們須要編譯便可:
在hello_cmake文件下執行如下命令:
mkdir build
cd build
cmake ..
make
執行的結果:
能夠看到咱們已經生成了動態的連接庫文件libhello_shared.so
以及靜態連接庫libhello.a
能夠直接運行程序
如何經過 INCLUDE_DIRECTORIES 指令加入非標準的頭文件搜索路徑。
如何經過 LINK_DIRECTORIES 指令加入非標準的庫文件搜索路徑。
若是經過 TARGET_LINK_LIBRARIES 爲庫或可執行二進制加入庫連接。
以及如何連接到靜態庫。
關於CMake中的一些經常使用變量:
(1)CMAKE_SOURCE_DIR , PROJECT_SOURCE_DIR ,<projectname>_SOURCE_DIR 都表明這工程的頂層目錄
(2)CMAKE_CURRENT_SOURCE_DIR 指的是當前處理的 CMakeLists.txt 所在的路徑
(3)CMAKE_CURRENT_LIST_FILE 輸出調用這個變量的 CMakeLists.txt 的完整路徑
(4)CMAKE_MODULE_PATH
這個變量用來定義本身的 cmake 模塊所在的路徑。若是你的工程比較複雜,有可能會本身 編寫一些 cmake 模塊,這些 cmake 模塊是隨你的工程發佈的,爲了讓 cmake 在處理
CMakeLists.txt 時找到這些模塊,你須要經過 SET 指令,將本身的 cmake 模塊路徑設 置一下。
好比 SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) 這時候你就能夠經過 INCLUDE 指令來調用本身的模塊了。這種定義CMAKE模塊的方式在PCL中也是有的
(5)EXECUTABLE_OUTPUT_PATH 和 LIBRARY_OUTPUT_PATH 分別用來從新定義最終結果的存放目錄,前面咱們已經提到了這兩個變量。
(6)ROJECT_NAME 返回經過 PROJECT 指令定義的項目名稱。
CMAKE中調用環境變量的方式
(1) 設置環境變量的方式是: SET(ENV{變量名} 值) 好比上面的例子就有用到
(2)CMAKE_INCLUDE_CURRENT_DIR 自動添加 CMAKE_CURRENT_BINARY_DIR 和 CMAKE_CURRENT_SOURCE_DIR 到當前處理
的 CMakeLists.txt。至關於在每一個 CMakeLists.txt 加入: INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
CMAKE中的開關選項
(1)CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS,用來控制 IF ELSE 語句的書寫方式
(2)BUILD_SHARED_LIBS 這個開關用來控制默認的庫編譯方式,若是不進行設置,使用 ADD_LIBRARY 並無指定庫 類型的狀況下,默認編譯生成的庫都是靜態庫。 若是 SET(BUILD_SHARED_LIBS ON)後,默認生成的爲動態庫。
(3)CMAKE_C_FLAGS 設置 C 編譯選項,也能夠經過指令 ADD_DEFINITIONS()添加。
(4)CMAKE_CXX_FLAGS 設置 C++編譯選項,也能夠經過指令 ADD_DEFINITIONS()添加。
這是一個簡單的創建CMake的工程教程,接下來將會詳細介紹PCL 中的更多內容
以上內容若有錯誤或者須要補充的,請留言!同時歡迎你們關注微信公衆號,積極分享投稿,作到你們一塊兒分享,拒絕只作個伸手黨!或者加入3D視覺微信羣或QQ交流羣,一塊兒交流分享!
投稿或聯繫羣主郵箱:dianyunpcl@163.com
原創不易,轉載請聯繫羣主,註明出處。
Share together, up together
視覺點雲