Mac下cmake使用_mac cmake_简简单单lym的博客-程序员宝宝

技术标签: xcode  ios  日常开发工具  macos  

编译iOS库

CMakeList.txt中的配置是通用的,编译的目标系统需要在编译命令cmake后面指定,在Mac系统上默认编译的是基于Mac系统的x86_64的,指定编译iOS可以使用下列命令:

cmake .. -GXcode \
    -DCMAKE_SYSTEM_NAME=iOS \
    "-DCMAKE_OSX_ARCHITECTURES=armv7;arm64" \
    -DCMAKE_OSX_SYSROOT=iphoneos\
    -DCMAKE_OSX_DEPLOYMENT_TARGET=9.0 \
    -DCMAKE_INSTALL_PREFIX=`pwd`/_install \
    -DCMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH=NO \
    -DCMAKE_IOS_INSTALL_COMBINED=YES \
    -DENABLE_BITCODE=NO

其中GXcode 会生成xcode工程,DCMAKE_OSX_ARCHITECTURES是指定目标包含的架构,这里指定了armv7和arm64两个架构;DENABLE_BITCODE指定是不是启用bitcode,这个需要根据各自的项目需求设置,NO是不适用bitcode优化;
在 cmake后面可以增加-DCMAKE_BUILD_TYPE=Release去指定编译的是release还是debug,例如编译macos可以如下指定:

   cmake -DCMAKE_BUILD_TYPE=Release ..
   cmake --build .

上面命令执行完后执行下列命令编译:

cmake --build . --config Release

执行后出现如下图的显示表示编译成功:
在这里插入图片描述

在官方的文档中也是建议这样的方式进行编译,config后面指定的是编译的是release还是debug,最终编译的效果如下:
在这里插入图片描述
上图中是指定了生成编译库的路径后的效果,指定编译库路径的方式在下节介绍;

指定编译库的路径

很多时候当编译不同平台的库的时候我们希望编译的库放在不通的目录下,
cmake中判断编译的目标系统是ios还是macOS的方式:

if(APPLE AND  NOT IOS )
# iOS下
   set(LIBRARY_OUTPUT_PATH mac)
else()
# macOS下
   set(LIBRARY_OUTPUT_PATH ios)
endif( )

通过上面的判断就可区分出当前编译的是iOS还是MacOS的库,然后通过LIBRARY_OUTPUT_PATH就可以指定编译的二进制库的输出路径;
需要注意的是上面的代码需要放在add_library之前指定;
常用的判断系统的方式还有:

IF (WIN32)
	MESSAGE(STATUS "Now is windows")
ELSEIF (APPLE)
	MESSAGE(STATUS "Now is Apple systens.")
ELSEIF (UNIX)
	MESSAGE(STATUS "Now is UNIX-like OS's.")
ELSEIF(ANDROID)
   MESSAGE(STATUS "Now is Android OS's.")

官方的系统支持的系统变量还有很多,具体看官方文档:cmake-variables

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lym594887256/article/details/125915386

智能推荐

vscode格式化工具vetur的settings.json的基本配置_vetur 格式化配置_飘在一座城的博客-程序员宝宝

vscode格式化工具vetur的settings.json的基本配置 html不换行 代码空格4格 等配置

vscode的编辑器设置settings.json_小也同学的博客-程序员宝宝

{“editor.fontSize”: 15,“editor.fontFamily”: “consolas, Micorsoft Yahei , monaco ,‘Courier New’, monospace”,“window.zoomLevel”: 0,“editor.tabSize”: 2,“editor.wordWrap”: “on”,// 通过使用鼠标滚轮同时按住 Ctrl 可缩放编辑器的字体“editor.mouseWheelZoom”: true,“files.autoSave

python爬取网易云音乐评论并制作词云_小太阳️的博客-程序员宝宝

 这几天一直在想我还没爬取过的网站,以及会遇到的难点。每天使用网易云听歌,想着选首喜欢的歌去爬爬它的评论,我是用《小宇》这首歌做实例的。爬虫写的多了,自然也知道在源码里面找不到的数据,基本上都是动态加载出来的,这个时候我一般会打开网页右击检查(我一般使用的都是Google浏览器),选中它的NetWork,上图(不知道为什么粘贴下来的图片这样别扭)。选中XHR(感觉一直用这个还不知道是啥意...

SVPWM程序_晓晓李的博客-程序员宝宝

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入请问谁有基于...

spring基础了解,小白入门框架必备_weixin_42495228的博客-程序员宝宝

0.spring框架家族的学习路线spring framework–>springWebMVC–>springboot–>springdata–>springSession–>springCloud1.搭建spring环境​ 最新版本5.2.8​ spring 框架中学习路线: 核心的:IOC和AOP 测试:与junit集成 持久层:事务管理 web:springMVC 组件集成:远程接口调用,任务调度操作步骤:- 引入spring的核心jar包:4个核

windows搭建MQTT服务器_mqtt环境 win11_内卷的馒头的博客-程序员宝宝

文章目录一、下载mosquitto二、配置mosquitto三、MQTTX一、下载mosquitto点击下载安装程序 下载地址二、配置mosquitto安装路径打开命令行界面设置user及password执行:mosquitto_passwd.exe -c pwfile.example -u vic设置用户名:vic 设置密码:123456配置文件检查 mosquitto.exe -c mosquitto.conf 未报错说明配置正常设置端口 默认

随便推点

flutter 报错 type ‘int‘ is not a subtype of type ‘String‘ 奇葩经历_编程小龙的博客-程序员宝宝

dart、flutter、报错type 'int' is not a subtype of type 'String'的奇葩经历

去除警告 ArrayList is a raw type_茶如影的博客-程序员宝宝

Eclipse里出现的警告:ArrayList is a raw type. References to generic type ArrayList should be parameterized经查阅资料,和泛型有关。原先的代码:ArrayList list1 = new ArrayList();会出现黄色的警告标志,内容如上所示。正确的代码格式:ArrayList<String> list1 = new ArrayList<String>();...

ORM-JPA-Hibernate_.南风.的博客-程序员宝宝

ORM-JPA-Hibernate总述ORMJPAHibernateJPA和Hibernate之间的关系总述JPA本身是一种规范,它的本质是一种ORM规范,JPA和Hibernate之间的关系,可以简单的理解为JPA是标准接口,Hibernate是实现,Hibernate属于遵循JPA规范的一种实现,但是JPA是Hibernate遵循的规范之一,Hibernate还有其他实现的规范。ORMORM是一种思想O代表的是ObjcetR代表的是RelativeM代表的是MappingORM-&gt

VCO的非线性的matlab建模,基于MATLAB的锁相环非线性分析_微分方程法_SonIC Lab的博客-程序员宝宝

论文导读::利用MATLAB强大的绘图功能(4):。基于MATLAB的锁相环非线性分析。论文关键词:锁相环,微分方程法,非线性,MATLAB引言:锁相环是一种相位反馈的闭环自动控制系统[1],环路锁定之后,平均稳态频差等于零, 稳态相差为固定值,锁相环的这一重要特征使其在电视、 通信、 雷达、遥测遥感、 测量仪表,特别是在人造卫星和宇宙飞船的无线电系统中,得到了广泛应用[2]。近年来,锁相环路的研...

10-声明式API_Zeb-D的博客-程序员宝宝

[toc]命令式命令行操作很多 Kubernetes 的 API 对象,有的是用来描述应用,有的则是为应用提供各种各样的服务。但是,无一例外地,为了使用这些 API 对象提供的能力,你都需要编写一个对应的 YAML 文件交给 Kubernetes。这个 YAML 文件,正是 Kubernetes 声明式 API 所必须具备的一个要素。不过,是不是只要用 YAML 文件代替了命令行操作,就是...

推荐文章

热门文章

相关标签