• 跨平台的编码


    需要区分不同平台的场景

    • 链接第三方库的时候
    • 难免存在不能跨平台的API。。。
    • 其他场景(待补充)

    工程组织文件

    方法1:

    # 检测操作系统
    if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
        message(STATUS "Config Linux")
        target_compile_definitions(${mainname} PUBLIC "IS_LINUX")
    elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
        message(STATUS "Config Windows")
        target_compile_definitions(${mainname} PUBLIC "IS_WINDOWS")
    elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
        message(STATUS "Config MacOS")
        target_compile_definitions(${mainname} PUBLIC "IS_MACOS")
    else()
        message(STATUS "${CMAKE_SYSTEM_NAME}")
    endif()
    
    # -- Config Windows
    

    方法2:

    IF(WIN32)
    	message(STATUS "Windows")
    ELSEIF(UNIX)
    	message(STATUS "Unix or like Unix")
    ELSEIF(APPLE)
    	message(STATUS "Apple")
    ENDIF()
    

    源文件

    int data_get(){
    #ifdef IS_WINDOWS
        return 1;
    #elif IS_LINUX
        return 2;
    #elif IS_MACOS
        return 3;
    #else
        return 4;
    #endif
    }
    
    int a = data_get();  // a == 1
    

    系统相关常用变量

    1. CMAKE_MAJOR_VERSION,CMAKE 主版本号,比如 2.4.6 中的 2
    2. CMAKE_MINOR_VERSION,CMAKE 次版本号,比如 2.4.6 中的 4
    3. CMAKE_PATCH_VERSION,CMAKE 补丁等级,比如 2.4.6 中的 6
    4. CMAKE_SYSTEM,系统名称,比如 Linux-2.6.22
    5. CMAKE_SYSTEM_NAME,不包含版本的系统名,比如 Linux
    6. CMAKE_SYSTEM_VERSION,系统版本,比如 2.6.22
    7. CMAKE_SYSTEM_PROCESSOR,处理器名称,比如 i686.
    8. UNIX,在所有的类 UNIX 平台为 TRUE,包括 OS X 和 cygwin
    9. WIN32,在所有的 win32 平台为 TRUE,包括 cygwin

    target_compile_definitions

    • 为目标添加编译定义。
      target_compile_definitions(<target> <INTERFACE|PUBLIC|PRIVATE> [items1...] [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])

    • 命名的 必须由诸如 add_executable() 或 add_library() 之类的命令创建,并且不能为ALIAS target。

    • 需要 INTERFACE , PUBLIC 和 PRIVATE 关键字来指定以下参数的范围。 PRIVATE 和 PUBLIC 项目将填充 的 COMPILE_DEFINITIONS 属性。 PUBLIC 和 INTERFACE 项目将填充 的 INTERFACE_COMPILE_DEFINITIONS 属性。

  • 相关阅读:
    pdf文件怎么转换成word文档
    数据库的发展历程
    数据库的三级模式
    数据库概述
    时间序列的自回归模型—从线性代数的角度来看
    数据清洗
    sql commit的三种方式
    数据库标准语言SQL((Structured Query Language)
    正则化推导转载
    leetcode刷题
  • 原文地址:https://www.cnblogs.com/faithlocus/p/15593439.html
Copyright © 2020-2023  润新知