接前面的Cmake学习笔记(一)与Cmake学习笔记(二)继续学习
cmake 的使用。
学习一下cmake的 finder。
finder是神马东西?
当编译一个需要使用第三方库的软件时,我们需要知道:
去哪儿找头文件 .h
|
对比GCC的-I参数
|
去哪儿找库文件 (.so/.dll/.lib/.dylib/...)
|
对比GCC的-L参数
|
需要链接的库文件的名字
|
对比GCC的-l参数
|
这也是一个 finder 需要返回的最基本的信息。
如何使用?
比如说,我们需要一个第三方库 curl,那么我们的 CMakeLists.txt 需要指定头文件目录,和库文件,类似:
include_directiories(/usr/include)
target_link_libraries(myprogram curl)
如果借助于cmake提供的finder会怎么样呢?使用cmake的Modules目录下的FindCURL.cmake,相应的 CMakeList.txt 文件:
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/
- 然后在 CMakeList.txt 中添加
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-x.y/Modules/
如果这个文件未找到,它将会查找 <Name>Config.cmake 或 <lower-case-name>-config.cmake 文件。这两个文件是库文件安装时自己安装的,将自己的路径硬编码到其中。
前者称为 module 模式,后者称为 config 模式
每个模块一般都会提供一下几个变量
编写finder
- 首先使用 find_package 探测本软件包依赖的第三方库(参数 QUIETLY 和 REQUIRED应该被传递)
- 如果 pkg-config 可用,则可以用其去探测include/library路径
- 分别使用 find_path 和 find_library 查找头文件和库文件
-
设置 <name>_INCLUDE_DIRS 为 <name>_INCLUDE_DIR <dependency1>_INCLUDE_DIRS ...
-
设置 <name>_LIBRARIES 为 <name>_LIBRARY <dependency1>_LIBRARIES ...
- 依赖使用复数,包自身使用单数形式(由find_path和find_library提供)
-
调用宏 find_package_handle_standard_args() 设置 <name>_FOUND 并打印或失败信息
参考
分享到:
相关推荐
个人cmake学习笔记
cMake 学习笔记,快速入门
使用cmake的Modules目录下的FindCURL.cmake,相应的CMakeList.txt 文件:或者cmake 学习笔记(三) Mingz技术博
cmake 学习笔记(二) - Mingz技术博客 - 博客频道 - CSDN1
最大的Qt4程序群(KDE4)采用cmake作为构建系统Qt4的python绑定(pyside)采用了cmake作为构建系统开源的图像处理库 opencv 采用
最近接触到一些工程上的代码,都是用cmake来编译的,每次看着CMakeLists.txt 就各种懵逼,决定从0 开始学习 1 set set(var hello) message(${var}) 输出 hello 其实并不是单单输出hello,还有很多其他信息,会...
CMake入门笔记--CMake官网教程中的工程,可以在有cmake的环境下直接进行编译,运行。注释详细,方便学习。
文件多层次 text.file main.cpp CMakeLists.txt head.file main.h function.cpp CMakeLists.txt 最内层的CMakeList.txt // head.file内的CMakeList.txt #查找当前目录下的所有源文件 ...// text.file内的CMakeList.txt
本教程《cmake 实践》(Cmake Practice). 本文档是边学习边编写的成果,更像是一个学习笔记
本文档是边学习边编写的成果,更像是一个学习笔记和Tutorial,因此难免有失误或者理解不够透彻的地 方,比如,我仍然不能理解为什么绝大部分使用变量的情况要通过${}引用,而在IF语句中却必须直接 使用变量名。...
① 下载安装cmake:apt-get install cmake cmake-curses-gui ② 已安装arm-xilinx-linux-gnueabi-gcc编译环境 1、 新建安装目录 新建安装目录/home/esion/zed,将opencv-2.4.10.zip复制到zed文件夹中并解压缩,这样...
3、Cmake安装,QT安装,geany安装 4、qibuild的环境配置 5、ssh命令、gftp命令,gedit命令使用 6、Ubuntu下生成bin文件和.so文件 7、模块生成和python调用模块 8、pkg和gtk安装 9、OpenCV的安装(ubuntu12.04安装...
GSL 开源 科学计算库 学习笔记(分享部分译稿) GSL是GNU Scientific Libary的简写,是一组专门为数值科学计算而设计的程序库。该程序库用C语言写就,C程序员提供了API。不过 可以对其使用swig工具进行封装,以便能...
进行OpenCV配置,通过上下键和回车键设置WITH_V4L为ON其他所有WITH开头的选项选成OFF,因为这些需要第三方库支持的,要是选择这些的话就需要安装第三方库了。设置完成后按c键进行配置,g键产生Makefile文件。 5、 ...
方法: ... 您可能感兴趣的文章:Android Studio中通过CMake使用NDK并编译自定义库和添加预编译库详解Android JNI的基本使用(CMake)详解Android studio ndk配置cmake开发native Ccmake 学习笔记CentO
一步步介绍了使用openal的步骤,是我学习过后的总结。附带完整的源代码。
ROS2学习笔记之创建自己的功能包背景前期准备学习内容1. 创建一个包2. 编译新建的包3 Source工作空间的配置文件4 使用新建的包5. 查看包的内容6. 自定义 package.xml总结 学习目标: 使用CMake或Python创建一个新的包...
C++基础进阶学习资料笔记1.0.zip
2020年待办事项原虫CMake的C ++服务器开发木多TCP / IP 锈区块链开发学习笔记