【CMake学习笔记】|预定义变量(二)

原创 Linux二进制 2024-03-05 15:01

一、内置变量

变量功能
PROJECT_NAME通过PROJECT()命令指定的项目名称
CMAKE_PROJECT_NAME当前项目的名称
PROJECT_SOURCE_DIR使用cmake命令后紧跟的目录,一般是工程的根目录
PROJECT_BINARY_DIR执行cmake命令的目录
EXECUTABLE_OUTPUT_PATH重新定义目标二进制可执行文件的存放位置
LIBRARY_OUTPUT_PATH重新定义目标链接库文件的存放位置
CMAKE_SOURCE_DIR顶级 CMakeLists.txt 文件所在路径(这个变量与子目录中的 CMakeLists.txt 文件无关)
CMAKE_BINARY_DIR项目实际构建路径,假设在build目录进行的构建,那么得到的就是这个目录的路径(这个变量与子目录中的 CMakeLists.txt 文件无关)
CMAKE_CURRENT_SOURCE_DIR当前处理的CMakeLists.txt所在的路径
CMAKE_CURRENT_BINARY_DIR当前 CMakeLists.txt 构建输出所在的目录
CMAKE_CURRENT_LIST_DIR当前执行 CMakeLists.txt 文件所在目录
CMAKE_CURRENT_LIST_FILE当前执行 CMakeLists.txt 文件所在路径
CMAKE_CURRENT_LIST_LINE当前执行 CMakeLists.txt 文件所在行号
CMAKE_INSTALL_PREFIX安装目录前缀
CMAKE_MODULE_PATH指定额外的CMake模块搜索路径
CMAKE_PREFIX_PATH用于查找库文件的路径前缀
CMAKE_BUILD_TYPE指定构建类型(比如ReleaseDebug

注意1

  • CMAKE_PROJECT_XXX 表示顶级 CMakeLists.txt 调用 PROJECT() 命令

  • PROJECT_XXX 表示 当前 CMakeLists.txt 调用 PROJECT() 命令

注意2CMAKE_* 与 CMAKE_CURRENT_* 区别在于,CMAKE_* 表示顶级 CMakeLists.txt 文件,CMAKE_CRRUENT_* 表示当前 CMakeLists.txt 文件。

二、编译变量

变量功能
CMAKE_C_FLAGS设置 C 编译器的命令行选项,也可以通过指令 add_definitions() 添加,示例: set(CMAKE_C_FLAGS "-std=c11 -pthread")
CMAKE_C_FLAGS_DEBUG用于Debug配置的C编译标记,示例: set(CMAKE_C_FLAGS_DEBUG "-g -O0")
CMAKE_C_FLAGS_RELEASE用于Release配置的C编译标记
CMAKE_C_COMPILER指定C编译器的完整路径,比如:设置 SET(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/arm-linux-gnueabihf-gcc),但是这句话只有写到PROJECT( project_name)之前才会起作用,或者将一系列设置写在toolchain.cmake文件中
CMAKE_C_COMPILER_ID使用的C编译器标识符
CMAKE_C_STANDARD指定项目编译的C语言版本,如C99,C11
CMAKE_C_STANDARD_REQUIRED是一个布尔值变量,用于指定是否强制使用 CMAKE_C_STANDARD中设置的 C 版本,如set(CMAKE_C_STANDARD_REQUIRED ON)
CMAKE_CXX_FLAGS设置 C++ 编译器的命令行选项,也可以通过指令 add_definitions() 添加
CMAKE_CXX_FLAGS_DEBUG用于Debug配置的C++编译标记
CMAKE_CXX_FLAGS_RELEASE用于Release配置的C++编译标记
CMAKE_CXX_COMPILER指定C++编译器的完整路径
CMAKE_CXX_COMPILER_ID使用的C++编译器标识符
CMAKE_CXX_STANDARD指定项目编译的C++语言版本,如C++14,C++17
CMAKE_CXX_STANDARD_REQUIRED是一个布尔值变量,用于指定是否强制使用 CMAKE_CXX_STANDARD中设置的 C++ 版本,如set(CMAKE_CXX_STANDARD_REQUIRED ON)
CMAKE_COMPILER_IS_GNUCXX如果当前构建使用 GNU C++ 编译器,则此变量值为True
CMAKE_VERBOSE_MAKEFILE如果为TRUE,构建过程将显示更多的信息

注意add_definitions(-DENABLE_DEBUG -DXYZ) # 参数之间用空格分隔

-D 相当于就是定义, -D 可以理解为告诉 cmake 后边我要定义一些参数了, 你每定义一个就在前边加上 -D 就是了。

三、项目变量

变量功能
PROJECT_NAME通过PROJECT()命令指定的项目名称
PROJECT_SOURCE_DIR使用cmake命令后紧跟的目录(即包含最顶层 CMakeLists.txt文件的目录),即项目的源代码根目录
PROJECT_BINARY_DIR项目的构建目录,如果是外部构建,这将与 CMAKE_BINARY_DIR不同
PROJECT_VERSION通过 PROJECT()命令设置的项目版本
PROJECT_VERSION_MAJOR项目的主版本号
PROJECT_VERSION_MINOR项目的次版本号
PROJECT_VERSION_PATCH项目的补丁版本号
PROJECT_VERSION_TWEAK项目的微调版本号(如果指定)
PROJECT_DESCRIPTION项目的描述信息(需要CMake 3.9及以上版本)
PROJECT_HOMEPAGE_URL项目的主页URL(需要CMake 3.12及以上版本)

注意PROJECT_VERSION、 PROJECT_VERSION_MAJOR、 PROJECT_VERSION_MINOR、 PROJECT_VERSION_PATCH和 PROJECT_VERSION_TWEAK变量的设置依赖于 PROJECT()命令中指定的版本信息,格式通常是 PROJECT(ProjectName VERSION major.minor.patch[.tweak])

四、系统变量

变量功能
­CMAKE_SYSTEM当前系统的名称和版本,为 CMAKE_SYSTEM_NAME 和 CMAKE_SYSTEM_VERSION 的组合,比如:Linux-4.18.0-277.el8.x86_64
CMAKE_SYSTEM_NAME不包含版本的系统名称,比如 set(CMAKE_SYSTEM_NAME Linux);该指令必须存在,其目的是设置目标机使用的操作系统名称,支持Linux,QNX,WindowsCE,Android等。如果没有操作系统,那么就写 Generic。执行该指令后,cmake 变量CMAKE_CROSSCOMPILING 会自动被设置为 TRUE,此时 cmake 就会“知道“现在执行的是交叉编译
CMAKE_HOST_SYSTEMCMake 构建时使用的系统的名称和版本
CMAKE_HOST_SYSTEM_NAME构建 CMake 时使用的系统名称,与 CMAKE_SYSTEM_NAME 类似,但适用于交叉编译。
­CMAKE_SYSTEM_VERSION系统版本,比如4.18.0-277.el8.x86_64
CMAKE_SYSTEM_PROCESSOR可选项,当前正在为其构建的CPU的名称,例如 set(CMAKE_SYSTEM_PROCESSOR arm);当不交叉编译时,此变量与 CMAKE_HOST_SYSTEM_PROCESSOR 变量具有相同的值;只有在目标程序要运行在不同硬件平台时候才需要进行设置针对不同的对象。它可以被用来做一些编译器编译选项的快速设定。
CMAKE_HOST_SYSTEM_PROCESSOR当前运行的CPUCMake的名称
CMAKE_CROSSCOMPILING如果当前构建是交叉编译,则此变量值为真
CMAKE_FIND_ROOT_PATH在交叉编译时,用于寻找目标系统上支持库和头文件的路径
CMAKE_SIZEOF_VOID_PCMake 编译器检测到的目标体系结构的 void * 的大小(例如为 4 或者 8),可用于确定是 32 位还是 64 位系统

五、平台变量

变量功能
WIN32当目标系统是 Windows(包括 Win64)时设置为True
UNIX如果当前系统是 Unix 类似系统(包括 Linux,macOS 和其他 Unix 系统),则此变量值为True
APPLE如果当前系统是基于 Apple 的操作系统(如 macOS),则此变量值为True
CYGWIN如果当前系统是 CygwinWindows 上运行的 Unix 类似环境),此变量值为True
MINGW如果当前系统使用 MinGW 编译器(适用于 Windows),此变量值为True
MSVC如果当前构建使用 Microsoft Visual C++ 编译器,则此变量值为True

六、特殊变量

变量功能
CMAKE_VERSIONCMake的版本
BUILD_SHARED_LIBS一个布尔变量,用于控制默认链接库的类型(静态或动态),用来控制默认的库编译方式,如果不进行设置,使用 add_library 又没有指定库类型的情况下,默认编译生成的库都是静态库

注意:如果 set(BUILD_SHARED_LIBS ON) 后,默认生成的为动态库。


Linux二进制 Linux编程、内核模块、网络原创文章分享,欢迎关注"Linux二进制"微信公众号
评论 (0)
  •   后勤实验仿真系统平台深度解析   北京华盛恒辉后勤实验仿真系统平台依托计算机仿真技术,是对后勤保障全流程进行模拟、分析与优化的综合性工具。通过搭建虚拟场景,模拟资源调配、物资运输等环节,为后勤决策提供数据支撑,广泛应用于军事、应急管理等领域。   应用案例   目前,已有多个后勤实验仿真系统平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润后勤实验仿真系统平台。这些成功案例为后勤实验仿真系统平台的推广和应用提供了有力支持。   一、核心功能   (一)后勤资源模拟
    华盛恒辉l58ll334744 2025-04-23 15:39 152浏览
  •   海上训练与保障调度指挥平台系统解析   北京华盛恒辉海上训练与保障调度指挥平台系统是现代海上作战训练的核心枢纽,融合信息技术、GIS、大数据及 AI 等前沿技术,旨在实现海上训练高效组织、作战保障科学决策。以下从架构功能、应用场景、系统优势及发展挑战展开解读。   应用案例   目前,已有多个海上训练与保障调度指挥平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润海上训练与保障调度指挥平台。这些成功案例为海上训练与保障调度指挥平台的推广和应用提供了有力支持。   一
    华盛恒辉l58ll334744 2025-04-24 15:26 35浏览
  • 故障现象一辆2016款奔驰C200L车,搭载274 920发动机,累计行驶里程约为13万km。该车组合仪表上的防侧滑故障灯、转向助力故障灯、安全气囊故障灯等偶尔异常点亮,且此时将挡位置于R挡,中控显示屏提示“后视摄像头不可用”,无法显示倒车影像。 故障诊断用故障检测仪检测,发现多个控制单元中均存储有通信类故障代码(图1),其中故障代码“U015587 与仪表盘的通信存在故障。信息缺失”出现的频次较高。 图1 存储的故障代码1而组合仪表中存储有故障代码“U006488 与用户界
    虹科Pico汽车示波器 2025-04-23 11:22 91浏览
  • 前言本文主要演示基于TL3576-MiniEVM评估板HDMI OUT、DP 1.4和MIPI的多屏同显、异显方案,适用开发环境如下。Windows开发环境:Windows 7 64bit、Windows 10 64bitLinux开发环境:VMware16.2.5、Ubuntu22.04.5 64bitU-Boot:U-Boot-2017.09Kernel:Linux-6.1.115LinuxSDK:LinuxSDK-[版本号](基于rk3576_linux6.1_release_v
    Tronlong 2025-04-23 13:59 123浏览
  •   陆地装备体系论证与评估综合平台系统解析   北京华盛恒辉陆地装备体系论证与评估综合平台系统是契合现代军事需求而生的专业系统,借助科学化、智能化手段,实现对陆地装备体系的全方位论证与评估,为军事决策和装备发展提供关键支撑。以下从功能、技术、应用及展望展开分析。   应用案例   目前,已有多个陆地装备体系论证与评估综合平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润陆地装备体系论证与评估综合平台。这些成功案例为陆地装备体系论证与评估综合平台的推广和应用提供了有力支持。
    华盛恒辉l58ll334744 2025-04-24 10:53 66浏览
  •   有效样本分析决策系统平台全面解析   一、引言   北京华盛恒辉有效样本分析决策系统在当今数据驱动的时代,企业、科研机构等面临着海量数据的处理与分析挑战。有效样本分析决策系统平台应运而生,它通过对样本数据的精准分析,为决策提供有力支持,成为提升决策质量和效率的关键工具。   应用案例   目前,已有多个有效样本分析决策系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润有效样本分析决策系统。这些成功案例为有效样本分析决策系统的推广和应用提供了有力支持。   二、平台概述
    华盛恒辉l58ll334744 2025-04-24 11:13 66浏览
  •   无人机结构仿真与部件拆解分析系统平台解析   北京华盛恒辉无人机结构仿真与部件拆解分析系统无人机技术快速发展的当下,结构仿真与部件拆解分析系统平台成为无人机研发测试的核心工具,在优化设计、提升性能、降低成本等方面发挥关键作用。以下从功能、架构、应用、优势及趋势展开解析。   应用案例   目前,已有多个无人机结构仿真与部件拆解分析系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润无人机结构仿真与部件拆解分析系统。这些成功案例为无人机结构仿真与部件拆解分析系统的推广和应用提
    华盛恒辉l58ll334744 2025-04-23 15:00 186浏览
  •   电磁频谱数据综合管理平台系统解析   一、系统定义与目标   北京华盛恒辉电磁频谱数据综合管理平台融合无线传感器、软件定义电台等前沿技术,是实现无线电频谱资源全流程管理的复杂系统。其核心目标包括:优化频谱资源配置,满足多元通信需求;运用动态管理与频谱共享技术,提升资源利用效率;强化频谱安全监管,杜绝非法占用与干扰;为电子战提供频谱监测分析支持,辅助作战决策。   应用案例   目前,已有多个电磁频谱数据综合管理平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润电磁频谱数
    华盛恒辉l58ll334744 2025-04-23 16:27 181浏览
  •   陆地边防事件紧急处置系统平台解析   北京华盛恒辉陆地边防事件紧急处置系统平台是整合监测、预警、指挥等功能的智能化综合系统,致力于增强边防安全管控能力,快速响应各类突发事件。以下从系统架构、核心功能、技术支撑、应用场景及发展趋势展开全面解读。   应用案例   目前,已有多个陆地边防事件紧急处置系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润陆地边防事件紧急处置系统。这些成功案例为陆地边防事件紧急处置系统的推广和应用提供了有力支持。   一、系统架构   感知层:部
    华盛恒辉l58ll334744 2025-04-23 11:22 121浏览
  •   高海拔区域勤务与装备保障调度系统平台解析   北京华盛恒辉高海拔区域勤务与装备保障调度系统平台专为高海拔特殊地理环境打造,致力于攻克装备适应、人员健康保障、物资运输及应急响应等难题。以下从核心功能、技术特点、应用场景及发展趋势展开全面解读。   应用案例   目前,已有多个高海拔区域勤务与装备保障调度系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润高海拔区域勤务与装备保障调度系统。这些成功案例为高海拔区域勤务与装备保障调度系统的推广和应用提供了有力支持。   一、核心
    华盛恒辉l58ll334744 2025-04-24 10:13 66浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦