Cmake 学三
接前面的 Cmake学(二) 继续学习 cmake 的使用。
学习一下cmake的 finder。
finder是神马东西?
当编译一个需要使用第三方库的软件时,我们需要知道:
的-I 参数
去哪儿找库文件(.so/.dll/.lib/.dylib/...)
的-L 参数
需要链接的库文件的名字
的-l 参数
这也是一个 finder 需要返回的最基本的信息。
如何使用?
比如说,我们需要一个第三方库 curl,那么我们的 需要指定头文件目录,和库文件,类似:
include_directiories(/usr/include)
target_link_libraries(myprogram curl)
如果借助于cmake提供的finder会怎么样呢?,相应的 文件:
find_package(CURL REQUIRED)
include_directories(${CURL_INCLUDE_DIR})
target_link_libraries(curltest ${CURL_LIBRARY})
或者
find_package(CURL)
if(CURL_FOUND)
include_directories(${CURL_INCLUDE_DIR})
target_link_libraries(curltest ${CURL_LIBRARY})
else(CURL_FOUND)
message(FATAL_ERROR "curl not found!")
endif(CURL_FOUND)
如果我们使用的finder,不是cmake自带的怎么办?
放置位置:工程根目录下的 cmake/Modules/
然后在 中添加
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
find_package如何工作
find_package 将会在module路径下查找 Find<name>.cmake。首先它搜索${CMAKE_MODULE_PATH}中的所有路径,然后搜索<CMAKE_ROOT>/share/cmake-/
如果这个文件未找到,它将会查找<Name> 或<lower-case-name>- 文件。这两个文件是库文件安装时自己安装的,将自己的路径硬编码到其中。
前者称为 module 模式,后者称为 config 模式
每个模块一般都会提供一下几个变量
<name>_FOUND
<name>_INCLUDE_DIR 或<name>_INCLUDES
<name>_LIBRARY 或<name>_LIBRARIES 或<name>_LIBS
<nam
CMake学习笔记3 来自淘豆网m.daumloan.com转载请标明出处.