![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
cmake
文章平均质量分 70
小黑屋1024
这个作者很懒,什么都没留下…
展开
-
cmake基础(1)——简单项目
本节将围绕着hello world展开介绍如何创建一个简单的项目。原创 2023-08-11 10:59:14 · 317 阅读 · 0 评论 -
cmake基础(2)——动/静态库
其中hello.h,hello_shared.lib,hello_static.lib,hello_shared.dll则是前面编译的动/静态库产物。实际上在windows下,如果没有导出任何内容(而linux下默认导出),则生成的动态库产物不包含lib文件,也就无法使用。首先这里开启了CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS变量,保证能够生成lib文件,方便下一节链接使用。首先,当前生效的内容为动态库,最后一句注释为静态库调用方式,将第7行替换则表示调用静态库。原创 2023-08-11 11:00:30 · 1020 阅读 · 0 评论 -
cmake基础(3)——安装
install命令用于指定安装时的规则,由于安装命令比较复杂,这里做一部分内容的介绍,后续用到再继续完善。本文档基于3.20,目前有6种安装方式。原创 2023-08-11 11:01:49 · 1489 阅读 · 0 评论 -
cmake常用命令(1)——函数相关
除此之外,还提供了ARGC获取参数的数量,以及ARGV0, ARGV1, ARGV2...这样通用的形式获取参数内容,如果ARGV#的值(#)超过实际参数值,则忽略此参数引用,想要避免则需要根据ARGC进行判断。比如有三个参数1,3,5,而实际只是用了ARGV0,那么ARGN则表示35两个参数的合并值。对于PARENT_SCOPE参数,则用于表示当前操作的变量是属于父作用域的,而不会影响到当前作用域的变量。函数调用通过函数名(参数 )的形式调用,函数名不区分大小写,但是强烈建议与原函数名保持一致。原创 2023-08-11 11:02:41 · 1229 阅读 · 0 评论 -
cmake常用命令(2)——流程控制
if命令在CMake的历史中很早就被编写出来了,早于${}变量求值语法,为了方便,它求值由其参数命名的变量,如上面的签名所示。Comparisons包括VERSION_LESS、VERSION_GREATER、VERSION_EQUAL、VERSION_LESS_EQUAL、VERSION_GREATER_EQUAL。只有当指定变量或字符串的值为合法数字,并且前者小于、大于、等于、小于等于、大于等于时为true。只有左侧变量或者字符串值的字母顺序小于、、大于、等于、小于等于、大于等于右侧时为true。原创 2023-08-11 11:03:30 · 294 阅读 · 0 评论 -
cmake扩展(1)——VS+CMake创建Qt项目
在一开始时,CMakeLists文件中add_executable没有添加WIN32配置,会导致每次运行时,除了ui窗口,还会弹出控制台窗口。上面提到的ui文件类名为Form,这是创建Qt Widgets Form File文件默认的类名,暂时没有发现预设的操作。项目右键->添加->新建项->Qt->Qt Widget Form File。为了解决这个问题,可以在右键->属性->链接器->系统->子系统,选择窗口;项目右键->添加->新建项->C++类。此时一个待ui的类就添加好了,可以在项目中使用了。原创 2023-08-11 11:04:57 · 1770 阅读 · 0 评论 -
cmake扩展(2)——windows下动态设置输出文件(dll/exe)版本
这里因为是按照我们设想的git tag版本格式(x.x.x),并根据git describe会自动返回"version-提交次数-g当前提交hash"内容所写的。另一种方式是通过cmake的PROJECT_VERSION,PROJECT_VERSION_MAJOR, PROJECT_VERSION_MINOR, PROJECT_VERSION_PATCH, PROJECT_VERSION_TWEAK来获取,但是无法动态调整版本号,需要手动修改。这里我们根据模板做了一定的修改。原创 2023-08-11 11:06:18 · 1265 阅读 · 0 评论 -
cmake扩展(3)——解决linux链接库问题路径问题
一文读懂Linux下动态链接库版本管理及查找加载方式 | IdeaWand转载 2023-08-11 15:35:16 · 140 阅读 · 0 评论 -
cmake扩展(4)——解决linux库版本冲突问题
通过添加这两个标志(其中任意一个都可以),表示当前库以及引用的库并不对外导出接口,且因为是静态库,所以当前库调用的opencv则被打包到静态库中,调用时无需链接外部的相关动态库,因此解决了opencv符号冲突的问题。在一个项目中引用了两个自己开发的库,而这两个库都直接或间接的调用了opencv,且两者调用的opencv版本不一样,导致打包运行时opencv符号冲突,导致崩溃。转载 2023-08-11 15:42:57 · 248 阅读 · 0 评论 -
cmake扩展(5)——file命令排除部分文件
获取所有文件(1,2,3,4.cpp,5.cpp)。而我们如果想要排除cpp文件的话,无法直接排除。在cmake中可以使用file命令获取需要的文件,并且支持正则/通配符,使用起来还是很方便的。list的REMOVE_ITEM命令表示从list中移除部分元素内容,这样,就可以排除掉不需要的文件啦。然后在使用list命令。原创 2023-08-18 17:03:42 · 3067 阅读 · 0 评论 -
一个简单的cmake模板(C++)
这是一个基于CMakeLists.txt创建的C++模板项目。它提供了固定的目录结构:src目录存放源码externals目录存放依赖(库),bin目录存放生成的产物install目录存放打包安装内容通过clone这个项目,可以快速的使用CMakeLists.txt文件,选择与项目相关的配置(默认提供最简单的可执行文件所需要的CMake配置),从而快速开始代码编辑,而不是到处寻找cmake命令目前支持的cmake内容有:1.项目名(project)原创 2023-12-14 14:38:37 · 861 阅读 · 0 评论