cmake find package 新增依賴庫

2021-10-12 22:01:12 字數 2303 閱讀 5199

此文為:輕鬆入門cmake系列教程

引入庫檔案時,我們必須知道標頭檔案的路徑還有庫檔案的路徑

在cmake某個程式的時候,經常會提示找不到某個所依賴的庫,那麼這是時候我們就需要檢查我們引入依賴庫的路徑對不對了, cmake中乙個自動尋找函式find_package()可以幫我們實現這個功能。

cmakefilelists.txt

find_package

( opencv required )

if(opencv_found)

include_directories

( $)

target_link_libraries

( $ $

)endif (opencv_found)

下面需要說明的是,find_package(opencv required)執行成功後,它的標頭檔案路徑,庫檔案路徑都會被賦值。

opencv_include_dirs 是標頭檔案路徑

opencv_libs 是庫檔案位址

有了標頭檔案和庫檔案,自然而然可以正常引用 opencv 了。

我們可以列印輸出這兩個變數:

message

("!!!!!!!!opencv_include_dirs:" $

)message

("!!!!!!!!opencv_libraries:" $

)

比如,cmake 可以很輕鬆引入 bzip2

find_package (bzip2)

if(bzip2_found)

include_directories($)

target_link_libraries (test $

)endif (bzip2_found)

bzip2 定義了一系列變數,含義如下

bzip2_found - system has bzip2

bzip2_include_dir - the bzip2 include directory

bzip2_libraries - link these to use bzip2

bzip2_need_prefix -

this is set if the functions are prefixed with bz2_

bzip2_version_string

總結:

現在用 *** 代表要查詢的 package 名字

find_pacakge(*** required)會設定一系列變數。

***_found 代表庫是否查詢成功

***_include_dirs 代表標頭檔案的路徑

***_libraries 代表庫檔案的路徑

乙個庫可能由好多個元件構成,cmake 可以單獨引入這些元件

find_package

(qt5 5.1

.0 components widgets xml sql)

引入了 qt5 中的 widgets xml sql 元件。

實際上,通過 find_package() 可以順利查詢任何符合 cmake package 標準的外部工程。

find_pacage()方法簽名如下:

find_package

([version]

[exact]

[quiet]

[module]

[required]

[[components]

[components...

]][optional_components components...

][no_policy_scope]

)

首先,cmake本身不提供任何搜尋庫的便捷方法,所有搜尋庫並給變數賦值的操作必須由cmake**完成,比如find***.cmake和***config.cmake。只不過,庫的作者通常會提供這兩個檔案,以方便使用者呼叫。

find_package採用兩種模式搜尋庫:

set

(lapack_dir /usr/local/lib/

)set

(lapack_include_dirs /usr/local/include)

set(lapack_libraries /usr/local/lib)

cmake findpackage 版本問題

專治cmake中findpackage的各種找不到問題,各種版本不對問題 以重症患者protbuf為例。首先明確一點,findpackage的作用就是找到相關目錄位址,並指定給相關變數。自動的找不著,我們手工指定就完了。protobuf found found the google protocol...

Xcode 新增依賴工程

今天玩cocos2d x,發現建立出來的工程的lib都只是.a檔案。想跟進去看看原始碼都不能如願。所以就決定把.a檔案替換掉 所以第一步 把cocos2d x 3.9拷貝到工程目錄下 第二步 把.xcodeproj add進來 第三步 在build phases target dependencie...

XCode IOS 新增module 依賴

1.將需要新增的module的拖到你的porject目錄下,被新增的module的字尾名為xcodeproj 2.選擇你的專案 httprequestdemo 在右側選擇taregets目錄下的同名檔案,然後在旁邊的視窗中找到general embedded binaries,因為我已經新增過了,所...