国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

Cmake中查找并使用其他程序庫(kù)

2019-11-06 06:49:24
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

在開(kāi)發(fā)軟件的時(shí)候我們會(huì)用到一些函數(shù)庫(kù),這些函數(shù)庫(kù)在不同的系統(tǒng)中安裝的位置可能不同,編譯的時(shí)候需要首先找到這些軟件包的頭文件以及鏈接庫(kù)所在的目錄以便生成編譯選項(xiàng)。例如一個(gè)需要使用博克利數(shù)據(jù)庫(kù)項(xiàng)目,需要頭文件db_cxx.h 和鏈接庫(kù) libdb_cxx.so ,現(xiàn)在該項(xiàng)目中有一個(gè)源代碼文件 main.cpp ,放在項(xiàng)目的根目錄中。

第一步,程序庫(kù)說(shuō)明文件

在項(xiàng)目的根目錄中創(chuàng)建目錄 cmake/modules/ ,在 cmake/modules/ 下創(chuàng)建文件 Findlibdb_cxx.cmake ,內(nèi)容如下:

文件 Findlibdb_cxx.cmake
01 MESSAGE(STATUS "Using bundled Findlibdb.cmake...")02
03 FIND_PATH(04   LIBDB_CXX_INCLUDE_DIR05   db_cxx.h 06   /usr/include/ 07   /usr/local/include/ 08   )09 10 FIND_LIBRARY(11   LIBDB_CXX_LIBRARIES NAMES  db_cxx12   PATHS /usr/lib/ /usr/local/lib/13   )

文件 Findlibdb_cxx.cmake 的命名要符合規(guī)范: FindlibNAME.cmake ,其中NAME 是函數(shù)庫(kù)的名稱(chēng)。Findlibdb_cxx.cmake 的語(yǔ)法與 CMakeLists.txt 相同。這里使用了三個(gè)命令: MESSAGE , FIND_PATH 和 FIND_LIBRARY 。

命令 MESSAGE 會(huì)將參數(shù)的內(nèi)容輸出到終端命令 FIND_PATH 指明頭文件查找的路徑,原型如下find_path(<VAR> name1 [path1 path2 ...]) 該命令在參數(shù) path* 指示的目錄中查找文件 name1 并將查找到的路徑保存在變量 VAR 中。清單538行的意思是在 /usr/include/  /usr/local/include/ 中查找文件db_cxx.h ,并將db_cxx.h所在的路徑保存在 LIBDB_CXX_INCLUDE_DIR中。命令 FIND_LIBRARY  FIND_PATH 類(lèi)似,用于查找鏈接庫(kù)并將結(jié)果保存在變量中。清單51013行的意思是在目錄 /usr/lib/ /usr/local/lib/ 中尋找名稱(chēng)為 db_cxx 的鏈接庫(kù),并將結(jié)果保存在 LIBDB_CXX_LIBRARIES

第二步, 在項(xiàng)目的根目錄中創(chuàng)建 CmakeList.txt :

可以查找鏈接庫(kù)的 CMakeList.txt
01 PROJECT(main)02 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)03 SET(CMAKE_SOURCE_DIR .)04 SET(CMAKE_MODULE_PATH ${CMAKE_ROOT}/Modules ${CMAKE_SOURCE_DIR}/cmake/modules) 05 AUX_SOURCE_DIRECTORY(. DIR_SRCS)06 ADD_EXECUTABLE(main ${DIR_SRCS})07
08 FIND_PACKAGE( libdb_cxx REQUIRED)09 MARK_AS_ADVANCED(10 LIBDB_CXX_INCLUDE_DIR11 LIBDB_CXX_LIBRARIES12 )13 IF (LIBDB_CXX_INCLUDE_DIR AND LIBDB_CXX_LIBRARIES)14 MESSAGE(STATUS "Found libdb libraries")15    INCLUDE_DIRECTORIES(${LIBDB_CXX_INCLUDE_DIR})16     MESSAGE( ${LIBDB_CXX_LIBRARIES} )17     TARGET_LINK_LIBRARIES(main ${LIBDB_CXX_LIBRARIES}18 )19 ENDIF (LIBDB_CXX_INCLUDE_DIR AND LIBDB_CXX_LIBRARIES)在該文件中第4行表示到目錄 ./cmake/modules 中查找 Findlibdb_cxx.cmake ,8-19 行表示查找鏈接庫(kù)和頭文件的過(guò)程。第8行使用命令 FIND_PACKAGE 進(jìn)行查找,這條命令執(zhí)行后 CMake 會(huì)到變量 CMAKE_MODULE_PATH 指示的目錄中查找文件 Findlibdb_cxx.cmake 并執(zhí)行。第13-19行是條件判斷語(yǔ)句,表示如果 LIBDB_CXX_INCLUDE_DIR 和 LIBDB_CXX_LIBRARIES 都已經(jīng)被賦值,則設(shè)置編譯時(shí)到 LIBDB_CXX_INCLUDE_DIR 尋找頭文件并且設(shè)置可執(zhí)行文件 main 需要與鏈接庫(kù) LIBDB_CXX_LIBRARIES 進(jìn)行連接。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 英德市| 扶余县| 奉新县| 镇赉县| 盱眙县| 梨树县| 云安县| 孟津县| 长阳| 平顶山市| 阿巴嘎旗| 于田县| 伊吾县| 托克托县| 三门峡市| 元朗区| 山东| 元江| 通海县| 永平县| 古田县| 栾城县| 易门县| 沙河市| 甘孜县| 房产| 镇江市| 宁德市| 上思县| 敦化市| 信阳市| 息烽县| 盈江县| 新宁县| 札达县| 岳阳市| 博客| 通州区| 泰州市| 当阳市| 潮安县|