在cmake 学习笔记(三)中简单学习了 find_package 的 model 模式,在cmake 学习笔记(四)中了解一个CMakeCache相关的东西。但靠这些知识还是不能看懂PySide使用CMakeLists文件,接下来继续学习find_package的
config 模式及package configure文件相关知识
find_package 的 config 模式
当CMakeLists.txt中使用find_package命令时,首先启用的是 module 模式:
如果finder未找到,则开始 config 模式:
<prefix>/
|
(W)
|
<prefix>/(cmake|CMake)/
|
(W)
|
<prefix>/<name>*/
|
(W)
|
<prefix>/<name>*/(cmake|CMake)/
|
(W)
|
<prefix>/(share|lib)/cmake/<name>*/
|
(U)
|
<prefix>/(share|lib)/<name>*/
|
(U)
|
<prefix>/(share|lib)/<name>*/(cmake|CMake)/
|
(U)
|
- find_package 参数及规则见manual
<name>Config.cmake
该文件至少需提供头文件路径和库文件信息。比如 ApiExtractorConfig.cmake 在Windows下一个例子:
# - try to find APIEXTRACTOR
# APIEXTRACTOR_INCLUDE_DIR - Directories to include to use APIEXTRACTOR
# APIEXTRACTOR_LIBRARIES - Files to link against to use APIEXTRACTOR
SET(APIEXTRACTOR_INCLUDE_DIR "D:/shiboken/dist/include/apiextractor")
if(MSVC)
SET(APIEXTRACTOR_LIBRARY "D:/shiboken/dist/lib/apiextractor.lib")
elseif(WIN32)
SET(APIEXTRACTOR_LIBRARY "D:/shiboken/dist/bin/apiextractor.dll")
else()
SET(APIEXTRACTOR_LIBRARY "D:/shiboken/dist/lib/apiextractor.dll")
endif()
该文件是通过 configure_file 机制生成的,我们看看 ApiExtractorConfig.cmake.in 文件:
SET(APIEXTRACTOR_INCLUDE_DIR "@CMAKE_INSTALL_PREFIX@/include/apiextractor@apiextractor_SUFFIX@")
if(MSVC)
SET(APIEXTRACTOR_LIBRARY "@LIB_INSTALL_DIR@/@CMAKE_SHARED_LIBRARY_PREFIX@apiextractor@apiextractor_SUFFIX@@LIBRARY_OUTPUT_SUFFIX@.lib")
elseif(WIN32)
SET(APIEXTRACTOR_LIBRARY "@CMAKE_INSTALL_PREFIX@/bin/@CMAKE_SHARED_LIBRARY_PREFIX@apiextractor@apiextractor_SUFFIX@@LIBRARY_OUTPUT_SUFFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@")
else()
SET(APIEXTRACTOR_LIBRARY "@LIB_INSTALL_DIR@/@CMAKE_SHARED_LIBRARY_PREFIX@apiextractor@apiextractor_SUFFIX@@LIBRARY_OUTPUT_SUFFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@")
endif()
对应的命令(变量的定义略过)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/ApiExtractorConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/ApiExtractorConfig.cmake" @ONLY)
<name>ConfigVersion.cmake
该文件用来比对版本是否匹配,看看ApiExtractorConfigVersion.cmake.in 的内容:
set(PACKAGE_VERSION @apiextractor_VERSION@)
if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" )
set(PACKAGE_VERSION_COMPATIBLE FALSE)
else("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" )
set(PACKAGE_VERSION_COMPATIBLE TRUE)
if( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}")
set(PACKAGE_VERSION_EXACT TRUE)
endif( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}")
endif("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" )
一般提供设置下面的变量
PACKAGE_VERSION
|
完整的版本字符串
|
PACKAGE_VERSION_EXACT
|
如果完全匹配为真
|
PACKAGE_VERSION_COMPATIBLE
|
如果兼容为真
|
PACKAGE_VERSION_UNSUITABLE
|
如果不可用为真
|
find_package进而根据这些设置
<package>_VERSION
|
full provided version string
|
<package>_VERSION_MAJOR
|
major version if provided, else 0
|
<package>_VERSION_MINOR
|
minor version if provided, else 0
|
<package>_VERSION_PATCH
|
patch version if provided, else 0
|
<package>_VERSION_TWEAK
|
tweak version if provided, else 0
|
参考
分享到:
相关推荐
个人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工具进行封装,以便能...
① 下载安装cmake:apt-get install cmake cmake-curses-gui ② 已安装arm-xilinx-linux-gnueabi-gcc编译环境 1、 新建安装目录 新建安装目录/home/esion/zed,将opencv-2.4.10.zip复制到zed文件夹中并解压缩,这样...
方法: ... 您可能感兴趣的文章: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 锈区块链开发学习笔记