CMakeLists.txt中常用庫檔案的查詢和連結
在使用CMake組織工程時,如果我們需要依賴某個庫檔案,需要完成以下步驟:
- 查詢庫檔案(find_package命令)
- 判斷是否找到庫檔案(XXX_FOUND標記),幷包含標頭檔案(include_directories命令)
- 連結庫檔案到目標(target_link_libraries命令)
因此,庫檔案、標頭檔案的名字(大小寫)我們就要清楚的寫明,不要混淆。我常用的庫如OpenCV, catkin, Boost, Eigen等,其用法如下。常見的名字有:name_INCLUDE_DIRS, name_INCLUDE_DIR, NAME_INCLUDE_DIRS, NAME_INCLUDE_DIR; name_LIBS, NAME_LIBS, name_LIBRARIES, NAME_LIBRARIES等。
其中,Eigen比較特殊, Eigen採用原始碼的方式提供給使用者使用,在使用時只需要包含Eigen的標頭檔案即可進行使用。之所以採用這種方式,是因為Eigen採用模板方式實現,由於模板函式不支援分離編譯,所以只能提供原始碼而不是動態庫的方式供使用者使用。
#查詢OpenCV是否安裝 find_package(OpenCV REQUIRED core highgui imgproc imgcodecs) if (OPENCV_FOUND) message(STATUS "找到OpenCV:\"${OpenCV_INCLUDE_DIRS}\",ENABLE_OPENCV巨集已開啟") message(STATUS "找到OpenCV:\"${OpenCV_LIBS}\"") include_directories(${OpenCV_INCLUDE_DIRS}) add_definitions(-DENABLE_OPENCV) list(APPEND LINK_LIB_LIST ${OpenCV_LIBS}) endif (OPENCV_FOUND) #查詢Boost是否安裝 find_package(Boost REQUIRED COMPONENTS regex graph chrono thread system filesystem serialization) if (Boost_FOUND) message(STATUS "找到Boost:\"${Boost_INCLUDE_DIRS}\",ENABLE_BOOST巨集已開啟") message(STATUS "找到Boost:\"${Boost_LIBRARIES}\"") include_directories(${Boost_INCLUDE_DIRS}) add_definitions(-DENABLE_BOOST) list(APPEND LINK_LIB_LIST ${Boost_LIBRARIES}) endif (Boost_FOUND) #查詢catkin是否安裝 find_package(catkin REQUIRED COMPONENTS geometry_msgs roscpp tf ) if (catkin_FOUND) message(STATUS "找到catkin:\"${catkin_INCLUDE_DIRS}\",ENABLE_CATKIN巨集已開啟") message(STATUS "找到catkin:\"${catkin_LIBRARIES}\"") include_directories(${catkin_INCLUDE_DIRS}) add_definitions(-DENABLE_CATKIN) list(APPEND LINK_LIB_LIST ${catkin_LIBRARIES}) endif (catkin_FOUND) #查詢Eigen3是否安裝 find_package(Eigen3 REQUIRED) if (EIGEN3_FOUND) message(STATUS "找到Eigen3:\"${EIGEN3_INCLUDE_DIR}\",ENABLE_EIGEN3巨集已開啟") include_directories(${EIGEN3_INCLUDE_DIR}) add_definitions(-DENABLE_EIGEN3) # Eigen採用原始碼的方式提供給使用者使用,在使用時只需要包含Eigen的標頭檔案即可進行使用。 # 之所以採用這種方式,是因為Eigen採用模板方式實現,由於模板函式不支援分離編譯,所以只能提供原始碼而不是動態庫的方式供使用者使用。 # list(APPEND LINK_LIB_LIST ${EIGEN3_LIBRARIES}) endif (EIGEN3_FOUND) #MESSAGE(STATUS "**--** LINK_LIB_LIST: ${LINK_LIB_LIST}") target_link_libraries(${CMAKE_PROJECT_NAME}_shared ${LINK_LIB_LIST})
執行Reload CMake Project後的輸出資訊如下(不同的機器不同的安裝路徑輸出會不一樣):
對於自定義的庫,庫檔案和標頭檔案的名稱可能有所區別。-- 找到OpenCV:"/opt/ros/kinetic/include/opencv-3.3.1;/opt/ros/kinetic/include/opencv-3.3.1/opencv",ENABLE_OPENCV巨集已開啟 -- 找到OpenCV:"opencv_core;opencv_highgui;opencv_imgproc;opencv_imgcodecs" -- Boost version: 1.58.0 -- Found the following Boost libraries: -- regex -- graph -- chrono -- thread -- system -- filesystem -- serialization -- date_time -- atomic -- 找到Boost:"/usr/include",ENABLE_BOOST巨集已開啟 -- 找到Boost:"/usr/lib/x86_64-linux-gnu/libboost_regex.so;/usr/lib/x86_64-linux-gnu/libboost_graph.so;/usr/lib/x86_64-linux-gnu/libboost_chrono.so;/usr/lib/x86_64-linux-gnu/libboost_thread.so;/usr/lib/x86_64-linux-gnu/libboost_system.so;/usr/lib/x86_64-linux-gnu/libboost_filesystem.so;/usr/lib/x86_64-linux-gnu/libboost_serialization.so;/usr/lib/x86_64-linux-gnu/libboost_date_time.so;/usr/lib/x86_64-linux-gnu/libboost_atomic.so" -- .......省略........ -- 找到catkin:"/home/gjs/catkin_ws/devel/include;/home/gjs/catkin_ws/src/geometry/tf/include;/opt/ros/kinetic/include;/opt/ros/kinetic/share/xmlrpcpp/cmake/../../../include/xmlrpcpp;/usr/include",ENABLE_CATKIN巨集已開啟 -- 找到catkin:"/opt/ros/kinetic/lib/libtf.so;/opt/ros/kinetic/lib/libtf2_ros.so;/opt/ros/kinetic/lib/libactionlib.so;/opt/ros/kinetic/lib/libmessage_filters.so;/opt/ros/kinetic/lib/libroscpp.so;/usr/lib/x86_64-linux-gnu/libboost_filesystem.so;/usr/lib/x86_64-linux-gnu/libboost_signals.so;/opt/ros/kinetic/lib/libxmlrpcpp.so;/opt/ros/kinetic/lib/libtf2.so;/opt/ros/kinetic/lib/libroscpp_serialization.so;/opt/ros/kinetic/lib/librosconsole.so;/opt/ros/kinetic/lib/librosconsole_log4cxx.so;/opt/ros/kinetic/lib/librosconsole_backend_interface.so;/usr/lib/x86_64-linux-gnu/liblog4cxx.so;/usr/lib/x86_64-linux-gnu/libboost_regex.so;/opt/ros/kinetic/lib/librostime.so;/opt/ros/kinetic/lib/libcpp_common.so;/usr/lib/x86_64-linux-gnu/libboost_system.so;/usr/lib/x86_64-linux-gnu/libboost_thread.so;/usr/lib/x86_64-linux-gnu/libboost_chrono.so;/usr/lib/x86_64-linux-gnu/libboost_date_time.so;/usr/lib/x86_64-linux-gnu/libboost_atomic.so;/usr/lib/x86_64-linux-gnu/libpthread.so;/usr/lib/x86_64-linux-gnu/libconsole_bridge.so" -- 找到Eigen3:"/usr/include/eigen3",ENABLE_EIGEN3巨集已開啟
相關推薦
CMakeLists.txt中常用庫檔案的查詢和連結
在使用CMake組織工程時,如果我們需要依賴某個庫檔案,需要完成以下步驟:查詢庫檔案(find_package命令)判斷是否找到庫檔案(XXX_FOUND標記),幷包含標頭檔案(include_directories命令)連結庫檔案到目標(target_li
qt .pro檔案和cmakelists.txt配置第三方庫
.pro檔案引用第三方庫檔案和標頭檔案路徑 1.庫檔案(LIBS新增的是共享庫檔案,-L新增目錄,-l指定共享庫名稱) LIBS += -L/usr/local/lib -lmath LIBS的使用就是-L指定庫的目錄,而-l指定庫的名字,在Linux下,則去掉lib和字尾名,windows下
VC 6 0中新增庫檔案和標頭檔案
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
qt .pro文件和cmakelists.txt配置第三方庫
files 文件 oos cpp 配置 window set local main .pro文件引用第三方庫文件和頭文件路徑 1.庫文件(LIBS添加的是共享庫文件,-L添加目錄,-l指定共享庫名稱) LIBS += -L/usr/local/lib -lmath LI
linux中動態庫的編譯和載入的查詢順序
Glibc安裝的庫中有一個名為ld-Linux.so.X其中X為一個數字(版本), 在不同的平臺上可以通過ldd檢視 $ldd /bin/cat linux-vdso.so.1 => (0x00007fff9176f000) libc.so.6 => /lib
(轉)VC 6.0中新增庫檔案和標頭檔案
https://blog.csdn.net/yusiguyuan/article/details/12649665 附加標頭檔案包含 VC6.0中: VC6.0預設include包含路徑:Tools>Options>Directories>Include f
maven的安裝、路徑配置、修改庫檔案路徑和eclipse中的配置、建立maven工程。
maven的安裝、路徑配置、修改庫檔案路徑與在eclipse中的配置一、maven的安裝解壓apache-maven-3.3.9-bin.zip到自己的資料夾下,解壓後路徑如:D:\Program\apache-maven-3.3.9。二、路徑配置右鍵“計算機”,選擇“屬性”
Linux--Cmakelists.txt中關於include_directories,link_directories,link_libraries和target_link_libraries解析
總結一下include_directories,link_directories,link_libraries和target_link_libraries(此處大小寫字母皆可)的作用。 1.INCLUDE_DIRECTORIES(新增標頭檔案目錄) 它相當於g++選項中的-I引數的作用,
C#語言中常用的判斷語句和循環語句
只讀 代碼示例 賦值 循環 數字 其他 do while 表達 集合 C#語言中,我們常用的判斷語句和循環語句都有哪些呢? 1、if判斷 代碼格式:if(條件1){ 代碼1 }else if(條件2){ 代碼2
MS Sql Server 中主從庫的配置和使用介紹
money mas 篩選 緩存 事務性 添加 com 對象 報表 https://technet.microsoft.com/zh-cn/ff806143.aspx 網站規模到了一定程度之後,該分的也分了,該優化的也做了優化,但是還是不能滿足業務上對性能的要求;這時候我們
python中常用的文件和目錄操作(二)
工作目錄 environ win works ID ksh sys remove -s OS模塊 一. 概述 python os模塊提供了非常豐富的方法用來處理文件和目錄 二. 導入:import os 三. 常用方法 1. os.name 輸出字符串表示正在使用的平臺,如
學習筆記sql server數據庫批量查詢和刪除內容執行語句
sql server 數據庫 查詢 最近一直在研究博客,其實也就是現在熱門的自媒體,有意思的是,以前網民們都自己寫博客,建立一個自己的小站,現在又去了,都跑去平臺給人家免費打工,還自得其樂,也不知道這是什麽狀況。博客信息:主題:讀書筆記相關的學習主題。網站:使用一個.net的域名作為網址,例如駱駝
EF6基礎系列(十一)---EF6中的異步查詢和異步保存
chang 執行過程 fin .cn state 徹底 www. sch 查詢 EF6中的異步查詢和異步保存 在.NET4.5中介紹了異步操作,異步操作在EF中也很有用,在EF6中我們可以使用DbContext的實例進行異步查詢和異步保存。 1.異步查詢 下邊是一個通
在Excel中使用SQL語句查詢和篩選
本文轉自:http://blog.sina.com.cn/s/blog_5fc375650102e1g5.html 今天在微博上看到@資料分析精選 分享的一篇文章,是關於《在Excel中使用SQL語句實現精確查詢》,覺得非常受用,分享給大家。 微博上有人回覆評論說直接用vlooku
JNI/NDK:CMakeLists.txt 構建so庫,匯入三方so庫
本文使用最新的JNI構建工具CMake完成 通過這篇文章,你講學習到: camke構建自己的三方so庫 學會使用cmake管理自己jni檔案 學會使用cmake呼叫三方的so庫 1.CMakeLists.txt 構建so庫 建立jni的工具類
django中常用的資料查詢方法
5.2 資料查詢 要從資料庫檢索資料,首先要獲取一個*查詢集***(QuerySet),查詢集表示從資料庫獲取的物件集合,它可以有零個,一個或多個過濾器。返回查詢集的方法,稱為過濾器,過濾器根據給定的引數縮小查詢結果範圍,相當於sql語句中where或limit。 在管理器上
k8s中hostname, hosts檔案, DNS和代理問題, service和pod的訪問問題
驗證一個域名的ip地址可以使用 nslookup xx.xx..xx 在kubernets中不同名稱空間的服務相互訪問 涉及到的是Pod和Service之間的相互訪問,主要格式如下: 訪問Pod:(注意下面不是直接pod的ip,而是由pod的ip組成的字串)
Cmakelists.txt中配置glew
在cmakelists.txt中新增: add_library(glew_static STATIC IMPORTED) set_target_properties(glew_static PROPERTIES IMPORTED_LOCATION /home/ryan/DevLibrary/g
CMakeLists.txt 中設定編譯後的可執行程式優先呼叫本地庫
可執行程式查詢不到so庫 庫放在可執行程式目錄下的lib資料夾下,但是可執行程式沒有去呼叫,使用ldd指令 修改ld.so.conf也是無效 是否是CMakeLists.txt設定的問題? 有事找度娘。。。 設定可執行程式優先呼叫本地庫 SET(CMA
IAR中常用的 #pragma 命令和擴充套件關鍵字
pragma 命令 1、#pragma message(“ ”) 編譯器編譯到此處,在Build視窗中列印相應文字資訊。 2、#pragma error “” 編譯器編譯到此處,在Build視窗中產生錯誤並列印其文字資訊。 3、#pragma inline [=forc