CMake配置工程連接庫

CMake是一款優秀的C/C++項目構建工具。而C/C++項目常常使用一些第三方庫,如boost、luajit等。而在CMake下大體有3種方式將C/C++庫引入工程。html

find_package
find_package是CMake原生使用的庫查找命令。使用方式以下windows

find_package(Boost REQUIRED)
find_package(SDL2 REQUIRED)
if(Boost_FOUND) #這些變量的名稱沒有標準,去CMakeCache.txt裏看產生什麼變量。
message(STATUS "found boost")
endif()
include_directories(${Boost_INCLUDE_DIRS}) #這個類型變量確定會有,頭文件目錄
target_link_libraries(CruleEngine "${SDL2_IMAGE_LIBRARY}") #這是庫的位置 ​
1
2
3
4
5
6
7
這個查找主要是在unix下起做用,在windows下幾乎沒用。它是實際上是經過一個.cmake的配置文件,來找到對應的庫文件的位置。cmake自己內置了一些知名的庫的.cmake配置文件,如boost。
具體支持哪些,能夠經過app

cmake --help-module-list
1
或者在下面的網址查看詳細信息
https://cmake.org/cmake/help/v3.0/manual/cmake-modules.7.html
而想用不支持其餘庫的話,能夠本身去看看別人的項目有沒有提供。若是別人有提供,你能夠拷貝過來,放到項目目錄下,經過下面的方式指定module目錄。工具

set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/modules/") #工程根目錄的modules文件夾下
1
find_path & find_library
這個命令是用來查找包含指定文件的文件夾。好比下面的例子lua

find_path(GLIB_INCLUDE NAMES glib.h PATH_SUFFIXES "glib-2.0")
1
這裏是找glib.h的文件的位置,而後它的位置在/usr/include/glib-2.0目錄下,因此咱們加了一個搜索前綴glib-2.0來搜索目錄。默認狀況下,它會搜索系統下面的幾個目錄,可是有時候也能夠指定幾個特定路徑來搜索。unix

find_path(GD_INCLUDE NAMES glib.h PATH_SUFFIXES "glib-2.0"
PATHS /usr/local /usr/include
NO_DEFAULT_PATH)
1
2
3
好比這裏的NO_DEFAULT_PATH就是要求不找系統默認的幾個目錄。而是找PATHS指定的路徑。固然若是沒有指定搜索目錄,會有默認的查找目錄,具體查看
https://cmake.org/cmake/help/v3.0/command/find_path.htmlhtm

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")
1
2
3
4
5
6
7
能夠查看
https://cmake.org/cmake/help/v3.0/command/find_library.htmget

FindPkgConfig
這個自己是Unix/Linux下的一種庫的查找方式,它們能夠經過pkg-config命令來找到庫文件,它的使用方法以下it

g++ luabind.cpp -o luabind `pkg-config --cflags --libs luajit`
1
而CMake也對這種查找方式進行了封裝,使用方法以下

include(FindPkgConfig) #加載FindPkgConfig功能pkg_check_modules(XCB xcb REQUIRED) #查找xcb庫target_link_libraries(app ${XCB_LDFLAGS}) #連接xcb庫123注意這種方式須要庫提供pkg索引文件,通常經過Linux包管理安裝的庫都會帶有這個文件。 其餘具體信息能夠看 https://cmake.org/cmake/help/v3.0/module/FindPkgConfig.html

相關文章
相關標籤/搜索