CMake配置工程鏈結庫

2021-08-06 05:16:18 字數 2109 閱讀 1759

cmake是一款優秀的c/c++專案構建工具。而c/c++專案經常使用一些第三方庫,如boost、luajit等。而在cmake下大致有3種方式將c/c++庫引入工程。

find_package是cmake原生使用的庫查詢命令。使用方式如下

find_package(boost required)

find_package(sdl2 required)

if(boost_found) #這些變數的名稱沒有標準,去cmakecache.txt裡看產生什麼變數。

message(status "found boost")

endif()

include_directories($) #這個型別變數肯定會有,頭檔案目錄

target_link_libraries(cruleengine "$") #這是庫的位置 ​

這個查詢主要是在unix下起作用,在windows下幾乎沒用。它是其實是通過乙個.cmake的配置檔案,來找到對應的庫檔案的位置。cmake本身內建了一些知名的庫的.cmake配置檔案,如boost。

具體支援哪些,可以通過

cmake --help-module-list
或者在下面的**檢視詳細資訊

而想用不支援其他庫的話,可以自己去看看別人的專案有沒有提供。如果別人有提供,你可以拷貝過來,放到專案目錄下,通過下面的方式指定module目錄。

set(cmake_module_path "$/modules/") #工程根目錄的modules資料夾下
這個命令是用來查詢包含指定檔案的資料夾。比如下面的例子

find_path(glib_include names glib.h path_suffixes "glib-2.0")
這裡是找glib.h的檔案的位置,然後它的位置在/usr/include/glib-2.0目錄下,所以我們加了乙個搜尋字首glib-2.0來搜尋目錄。預設情況下,它會搜尋系統下面的幾個目錄,但是有時候也可以指定幾個特定路徑來搜尋。

find_path(gd_include names glib.h path_suffixes "glib-2.0"

paths /usr/local /usr/include

no_default_path)

比如這裡的no_default_path就是要求不找系統預設的幾個目錄。而是找paths指定的路徑。當然如果沒有指定搜尋目錄,會有預設的查詢目錄,具體檢視

find_library也是一樣。比如找glib2.0的庫,示例如下:

# linux下

set(cmake_find_library_prefixes "lib") #設定庫的字首

set(cmake_find_library_suffixes ".so"

".a") #設定庫的字尾

find_library(glib_lib names "glib-2.0")

# windows下的前字尾

set(cmake_find_library_prefixes "")

set(cmake_find_library_suffixes ".lib"

".dll")

可以檢視

這個本身是unix/linux下的一種庫的查詢方式,它們可以通過pkg-config命令來找到庫檔案,它的使用方法如下

g++

luabind

.cpp-o

luabind

`pkg

-config--

cflags--

libs

luajit`

而cmake也對這種查詢方式進行了封裝,使用方法如下

include(findpkgconfig)  #載入findpkgconfig功能

pkg_check_modules(xcb xcb required) #查詢xcb庫

注意這種方式需要庫提供pkg索引檔案,一般通過linux包管理安裝的庫都會帶有這個檔案。

其他具體資訊可以看

cmake新增動態鏈結庫

如果使用gcc進行單個c檔案編譯的時候,有時候後面會需要新增如 l l之類的引數,如下 gcc o test test.c l usr local lib lopencv 這裡 l是制定動態庫的位置,l則是指定打算連線的動態庫名字。那麼在進行專案編譯的時候就需要通過cmake來通過cmakelist...

CMake入門3之 靜態鏈結庫和動態鏈結庫

目錄 目標 環境 建立靜態和動態鏈結庫 檔案準備 構建 安裝靜態鏈結庫 使用靜態鏈結庫和動態庫 使用動態庫 使用靜態庫 構建靜態鏈結庫和動態鏈結庫,安裝到系統,寫乙個程式使用安裝的靜態鏈結庫。ubuntu18 cmake version 3.17.3 新建demo5 lib資料夾,包含內容如下 pa...

CMake新增標頭檔案,庫檔案,鏈結庫檔案

羅列一下cmake常用的命令。cmake支援大寫 小寫 混合大小寫的命令。1.新增頭檔案目錄include directories 語法 include directories after before system dir1 dir2 它相當於g 選項中的 i引數的作用,也相當於環境變數中增加路徑...