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

相关文章
相关标签/搜索