#ifndef .....
最后 有没有哪让写 #endif
---------------------------
make里中闭,两个程序可以先编译成 .obj,卖缓裂不链接。
然后链接两个 .obj 生成 .exe 文件
前面介绍了 find_package 有两种搜索包的模式(参考 find_package介绍 ),本篇文章介绍其中的一种:模块模式( Module Mode )。在这种模式下,当调用 find_package 命令查找 <PackageName>包的时候,实际上会去查找一个名为 Find<PackageName>.cmake 的文件,这个文件的主要任务就是确定一个包是否可用,查找的结果会反映在变量 <PackageName>_FOUND 上供 find_package 的调用者使用。当找到可用的包,同时也会提供使用这个包所需要的变量、宏和谈首燃导入目标(例如库文件)。前面已经介绍过使用系统提供的 FindLibLZMA.cmake 来查找 LibLZMA 库,这个文件是 CMake 在安装的时候就提供的,位于 CMake 的安装目录之下。因此对于未提供该文件的第三方库,我们可以通过自己生成 Find<PackageName>.cmake 来供 CMake 使用,接下来将介绍如何利用自己生成的 .cmake 文件找到自己编写的库。
模块模式 依赖另一个程序: pkg-config ,在继续往下之前,请参考 pkg-config用法详解 了解这个命令。
Find<PackageName>.cmake 文件承担了定义 <PackageName>包相关的变量的作用,这些变量称作"标准变量"。一旦 find_package 调用成功,这些变量将返回给调用者使用,为了保证不同的包之间返回的变量不冲突,对编写的 Find<PackageName>.cmake 返回的标准变量名称有如下约束:所有的变量都是以 PackageName_ 开头, PackageName 就是文件 Find<PackageName>.cmake 中的 <PackageName>,必须完全一致,大小写敏感。简单的列举含虚几个变量定义如下,更多的变量定义见本文的 四、对标准变量名称的更多说明 :
接下来我们来写一个 .cmake 文件,假设我们的包名为 mymath ,该包提供一个 libmymath.a 的库,其中包含一个 add 接口,简单计算两个整数的和并打印出结果(对这个库的更多信息可以参考 pkg-config用法详解 的 4.1 ~ 4.3 小节)。在编写 Findmymath.cmake 之前,我们先来看下 .cmake 文件的格式。
假定我们使用的库 mymath 已经提供了 .pc 文件,并能够通过 pkg-config 方式找到它(可以通过 pkg-onfig --list-all 查看到 mymath 库,参考 pkg-config用法详解 )。
接下来我们来编写库 mymath 的 Findmymath.cmake 文件,参照前面 .cmake 文件说明,内容如下,示例只提供了库目录、库文件、头文件等少量变量信息:
我们的测试文件 test.cpp 如下:
最后,在我们的 CMakeLists.txt 来使用 find_package 来找到并使用 mymath 库
在 CMakeLists.txt 下执行 cmake 命令,此处为了演示,直接指定 CMAKE_MODULE_PATH 的值为当前的 .cmake 所在路径,这样 find_package 命令会直接找到我们编写的 .cmake 文件并读取其中的内容,编译并运行最终程芹绝序(只摘取了我们关注的显示信息):
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)