• Mac下cmake使用


    编译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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    其中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 .
    
    • 1
    • 2

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

    cmake --build . --config Release
    
    • 1

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

    在官方的文档中也是建议这样的方式进行编译,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( )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    通过上面的判断就可区分出当前编译的是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.")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

  • 相关阅读:
    ModelBox开发体验:使用YOLOv3做口罩检测
    Android编程之Kotlin技巧与诀窍:提升代码可读性
    【小程序源码】笑话与趣图框架
    常见面试算法总结
    rust学习——操作字符串、字符串转义、操作UTF8-字符串 (操作中文字符串)
    十三、一起学习Lua 模块与包
    9.5~10.5 GHz频段室内离体信道的测量与建模
    Kafka的系统架构和API开发
    Java进阶之路-目录
    从零开始,开发一个 Web Office 套件(8):状态管理 & 拖动鼠标选中文字
  • 原文地址:https://blog.csdn.net/lym594887256/article/details/125915386