Cmake中find_package命令的搜索模式之配置模式(Config mode)

作者&投稿:西栏 (若有异议请与网页底部的电邮联系)
~   前面有介绍过 find_package 的两种搜索模式之一模块模式(请参考 Cmake命令之find_package介绍 和 模块模式 ),本文将介绍另外一种模式:配置模式。

  该模式下, CMake 会搜索 <lowercasePackageName>-config.cmake 文件或 <PackageName>Config.cmake 文件。如果 find_package 命令中指定了具体的版本,也会搜索 <lowercasePackageName>-config-version.cmake 或 <PackageName>ConfigVersion.cmake 文件,因此配置模式下通常会提供配置文件和版本文件(注意形式上要保持一致),并且作为包的一部分一起提供给使用者。

  同样的,当 find_package 调用返回时,一系列跟包相关的变量也会提供给调用者。例如 <PackageName>_FOUND 标识包是否找到、 <PackageName>_DIR 变量用于指示包配置文件所在的位置。实际上,返回的变量并没有特别的限制,但是还是建议遵循 模块模式 的标准变量名称的命名规则。

  一个配置文件方式提供的包由 包配置文件 (必须包含,名为 <lowercasePackageName>-config.cmake 文件或 <PackageName>Config.cmake )和 包版本文件 (可选,名为 <lowercasePackageName>-config-version.cmake 或 <PackageName>ConfigVersion.cmake )组成。配置文件和版本文件的命名要配对出现,也就是:

或者是:

  仍然是以我们自己编写的 mymath 库为例,假设 mymath 库提供了如下的文件:

   mymathConfig.cmake 文件有两种方式可以生成:

  可以参考 Cmake命令之find_package介绍 的 4.1 章节查看 .cmake 文件的搜索路径,我们的例子将在 find_package 中通过 PATHS 来指定。

   find_package 找到一个配置文件后,会尝试去查找版本文件。版本文件的主要作用是用来验证包的版本是否与 find_package 命令中指定的版本信息匹配。如果匹配的话,就会使用配置文件中的内容,否则会忽略配置文件中的内容。

  和配置文件一样,版本文件也有两种方式生成:

  当 find_package 命令在加载版本文件时,首先会通过从 find_package 中得到的版本信息设置如下变量,用于版本文件中版本对比:

  在版本文件中可以使用上述变量来检查版本的兼容性、版本是否匹配,并设置如下变量作为返回结果:

   find_package 会检查上述变量,如果版本匹配成功,那么 find_package 会返回如下变量给调用者:

   mymath 库的 CMakeLists.txt 内容如下:

  在命令行中执行 cmake . 和 make 生成 libmymath.a 库。

   mymath 库及其提供的 .cmake 配置文件见本文的第二章节。下面来编写测试文件:

  在命令行中执行 cmake . 和 make 生成 test 可执行文件并执行 ./test ,对应的输出结果如下(摘取重要部分呈现):


make,leave,have,find的复合结构
make,leave,have,find的复合结构 非谓语动词中使用... 非谓语动词中使用 展开  我来答 3个回答 #热议# 网文质量是不是下降了?匿名用户 2013-04-18 展开全部 (make)1.make+宾语+形容词2.make+宾语+动名词3.make+宾语+动词原形4.make+动名词5.make+动词原形 leave (离开;退出)。通常用于下列短语...

CMake是如何找到OpenSSL的?
最终,一系列变量如OPENSSL_INCLUDE_DIR、OPENSSL_LIBRARIES、OPENSSL_VERSION等被设置,这些变量在CMake构建过程中被利用,确保了工程能正确引用和链接OpenSSL。至此,CMake通过指定的目录、调用的pkg-config工具和FindOpenSSL.cmake脚本,成功地识别并利用了OpenSSL,完成工程构建。这一过程展示了CMake在依赖...

find 有什么意思
I hope some day you will find the woman who will make you happy 我希望有一天你能找到一个会让你幸福的女人。 2、n.发现物,被发现的人(尤指有趣、有价值或有用者) My new secretary is very good; quite a find, in fact. 我的新秘书很好,确实是难得的人才。 find短语: 1、find a true frie...

finding和find做名词用有什么区别?
the finding of a jury 陪审团的判决 Findings are keepings.[谚]谁捡到归谁。find (侧重强调动作,行为,过程)n.1.发现 2.发现物(尤指猎物、矿藏等); 被发觉有惊人能力的人; 新油田 have [make] a great find 有大发现; 找出宝物 an important archaeological find 考古学上的一项重要发现 ...

you may find it difficult to understand them,为什么IT后面跟形容...
句型是:find\/make sb\/sth adj\/n.例: I find him a good student. 我发现他是个好学生 I find him beautiful very much. 我发现他非常帅气!或: This accident makes him stronger.这个事故让他更加坚强。This movie makes her a super star. 这部影片让她成为了超级明星!希望我的回答能够...

如何使用CMake进行交叉编译
6. CMAKE_FIND_ROOT_PATH_MODE_LIBRARY:对FIND_LIBRARY()起作用,表示在链接的时候的库的相关选项,因此这里需要设置成ONLY来保证我们的库是在交叉环境中找的.7. CMAKE_FIND_ROOT_PATH_MODE_INCLUDE:对FIND_PATH()和FIND_FILE()起作用,一般来说也是ONLY,如果你想改变,一般也是在相关的FIND命令中...

我装的linux 系统中没有make命令,没有很多命令,比如init 、reboot、shu...
1、使用find命令查找\/etc目录下名字是inittb的文件,执行find \/etc\/ -name inittab,-name为参数,表示名字,执行后如图所示。2、在当前目录下,找到文件名是inittab的文件,首先进入目录,执行find . -name inittab,其中"." 表示当前目录。3、查找名字是tmp的文件夹,执行命令find \/etc ...

从find make and 这三个单词中找出一个不同类的。
And 是不同类哦。其他都是动词。如果这道题和英语没关系,那就可以把make 不同类,没有nd.或者find 不同类,没有a。

find是什么意思?
炸弹打中了他。This precious mineral is found in many provinces.许多省都有这种珍贵矿物。find [faind]vi.作出判断 找到猎物 find against the plaintiff 作出不利于原告的裁决 find [faind]n.发现 发现物(尤指猎物、矿藏等); 被发觉有惊人能力的人; 新油田 have [make] a great find 有大发现...

make有什么用法?
make a strike 成就,成功 make good one's loss 赔偿损失 make good one's promise 实现诺言 5、例句:Her jokes made us all laugh.她说的笑话把我们都逗乐了。If you take my advice, you will make a lot of money.如果你采纳我的建议,你将赚很多钱。Finally,I've got to find out ...

长沙县17889913352: findboost.cmake 脚本在哪 -
惠烟五羚: 把lib文件夹中的libboost_thread-vc100-mt-1_49.lib和libboost_thread-vc100-mt-gd-1_49.lib的lib头去掉 变成boost_thread-vc100-mt-1_49.lib和boost_thread-vc100-mt-gd-1_49.lib就能找到了

长沙县17889913352: 求教,cmake找不到库,帮帮忙,感激 -
惠烟五羚: 需要什么库 就把相应库的路径 添加到CMAKE寻找的目录中

长沙县17889913352: CLion 怎么链接外部库 比如boost -
惠烟五羚: CMakeLists.txt 决定了 CLion 对项目的所有配置,一定要修改它.为了便于跨平台(甚至只是跨机器),不建议指定具体的库目录,而是使用 find_package 让 CMake 去寻找这个库.当然 find_package 没有带对应的 .cmake 模块的时候,可以...

长沙县17889913352: 使用clion为什么cmake引入boost不成功 -
惠烟五羚: find_package(Boost 1.62.0)应该改成find_package(Boost REQUIRED COMPONENTS system) 再加上target_link_libraries(untitled1 ${Boost_LIBRARIES}) 让cmake去搞定Boost.另外,再加上链接Ws2_32.lib库.if(WIN32) target_link_libraries(untitled wsock32 ws2_32) endif()

长沙县17889913352: 如何在linux下使用Clion开发Qt的Gui程序 -
惠烟五羚: 准备工作:已安装好的QtCreator环境,但是觉得QtCreator不好用,转用其他开发工具 第一步,使用Clion创建一个C++项目,如下图:第二步,修改CMakeLists.txt和main.cpp文件:1). CMakeLists.txt修改如下:cmake_minimum_required(...

长沙县17889913352: ros中的节点用c++编写的时候直接调用就可以了吗 -
惠烟五羚: 一、首先建一个包 我的工作空间catkin_ws事先建好了,路径是/home/siat/catkin_ws 然后运行以下命令在src文件夹下建立test包$ cd ~/catkin_ws/src$ catkin_create_pkg test roscpp1212 注意在包的名字后加上一些基本的依赖,比如roscpp和...

长沙县17889913352: Ubuntu安装软件错误 -
惠烟五羚: 首先选好源(系统-系统管理-软件源),然后sudo apt-get update更新软件列表,之后就可以用新立德、软件中心(9.10才有),“sudo apt-get install 软件名”来安装了.尽量不要用dpkg,有些依赖关系解决不了,apt-get可以自动解决依赖问题.

长沙县17889913352: 如何使用CMake进行交叉编译 -
惠烟五羚: cmake交叉编译配置 很多时候,我们在开发的时候是面对嵌入式平台,因此由于资源的限制需要用到相关的交叉编译.即在你host宿主机上要生成target目标机的程序.里面牵扯到相关头文件的切换和编译器的选择以及环境变量的改变等,我今...

长沙县17889913352: 安装软件cmake找不到opencv路径求助 -
惠烟五羚: 用cmake编译时,你需要先把编译时用的opencv的源文件下载先来. 然后,编译时opencv路径选择含有cmakelists文件的文件夹.

长沙县17889913352: 怎么使用CMake链接不同版本的第三方库 -
惠烟五羚: 写批处理来做这件事.CMake中有CMAKE_CONFIGURATION_TYPE这个环境变量,其中的值就是Debug, Release, RelWithDebInfo, MinSizeRel这几个.只要使用if语句判断一下,在指定的版本使用指定的第三方库版本就可以了.可以参考OpenCV的CMakeLists

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网