首页 > 其他分享 >CMake使用

CMake使用

时间:2024-10-09 11:33:25浏览次数:6  
标签:... CMake target directories 命令 add 构建 使用

构建目标和属性

project

project(<项目名称> [<编程语言>...])
project(<项目名称>
        [VERSION <主版本号>[.<次版本号>[.<补丁版本号>[.<修订版本号>]]]]
        [DESCRIPTION <项目描述>]
        [HOMEPAGE_URL] <项目主页URL>
        [LANGUAGES <编程语言>...])

当无须声明各种属性时,第一种形式最简便,编程语言参数支持C、CXX、CUDA、OBJC、OBJCXX、Fortran、HIP、ISPC和ASM。

add_executable

add_executable(<目标名称> [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] [<源文件>...])

该命令创建一个可执行文件类型的构建目标,其中第一个参数是必选参数,目标名称并不一定是最终的可执行文件的名称,因可通过OUTPUT_NAME目标属性来修改。源文件可暂时省略,可通过target_source命令设置源程序。

add_library

add_library(<目标名称> <库类型> [EXCLUDE_FROM_ALL] [<源文件>...])

该命令会创建一个静态库|动态库|模块库类型的构建目标,<库类型>对应取值STATIC|SHARED|MODULE。

add_library(<目标名称> OBJECT [<源文件>...])

该命令会创建一个目标文件库的构建目标,该命令仅编译其包含的源文件,生成一系列的目标文件,并不会将这些目标文件打包或链接到某个库文件中。

include_directories

include_directories([AFTER|BEFORE] [SYSTEM] <目录>...)

该命令仅对当前目录及其子目录中的构建目标生效,用于将<目录>设置为构建目标的头文件搜索目录

target_include_directories

target_include_directories(<构建目标> 
    [SYSTEM] [AFTER|BEFORE] <PRIVATE|INTERFACE|PUBLIC> <目录> ... 
    [<PRIVATE|INTERFACE|PUBLIC> <目录>...]...)

该命令用于将<目录>加入到<构建目标>的头文件搜索目录列表中

target_link_directories(<构建目标> [BEFORE] 
    <PRIVATE|INTERFACE|PUBLIC> <目录>... 
    [<PRIVATE|INTERFACE|PUBLIC> <目录>...]...)

该命令用于将<目录>设置为<构建目标>的链接库搜索目录

target_sources

target_sources(<构建目标>
    <PRIVATE|INTERFACE|PUBLIC> <源文件>...
    [<PRIVATE|INTERFACE|PUBLIC> <源文件>...]...)

该命令用于设置构建目标所需的源文件

指定源文件方式

aux_source_directory

aux_source_directory(<目录> <结果变量>)

该命令用于遍历指定目录中的源文件,并将它们的路径存入结果变量中。若增添源文件,使用该命令不会引起CMakeLists.txt改变,可能不会重新构建。

add_subdirectory

add_subdirectory(<源文件目录> [<二进制目录>] [EXECLUDE_FROM_ALL])

该命令用于将源文件目录这个子目录加入项目,该子目录中必须含有一个CMake目录程序,当CMake执行该命令时,会立即进入子目录执行这个目录程序,当前目录程序的执行会暂停。

message

显示信息

message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] "message内容")

option

用于定义布尔型选项,可以在构建项目时启用或禁用特定的功能

# option_variable:选项变量的名称
# description:选项的描述
# initial_value:选项的初始值,通常是ON或OFF
option(<option_variable> "description" <initial_value>)

以是否启用日志功能为例:

option(ENABLE_LOGGING "Enable logging functionality" ON)

在CMakeLists.txt中可以通过if语句来使用这个选项:

if(ENABLE_LOGGING)
  # 这个函数会定义一个宏,在代码中可以判断该宏
  add_definitions(-DENABLE_LOGGING)
endif()

在使用CMake命令构建项目时可在命令行来启用或禁用option

cmake -DENABLE_LOGGING=OFF ..

CMake常用模块

find_package

用来寻找引用的外部库,包括头文件路径、链接库路径等。但是想要通过该命令寻找到库,需要库作者能提供XXXConfig.cmakeFindXXX.cmake配置文件。

# 以寻找googletest库为例
# REQUIRED参数表名如果没找到就不会向下执行
find_package(GTest REQUIRED)
include_directories(${GTest_INCLUDE_DIRS})
target_link_libraries(exec_name ${GTest_LIBS})

标签:...,CMake,target,directories,命令,add,构建,使用
From: https://www.cnblogs.com/songlh424/p/18441628

相关文章

  • [Java]多个参数的非空判断,不要再使用多个if挨个判断了!(多参数非空判断技巧)
    先上示例代码:if(StringUtils.isAnyBlank(form,to,subject,content)){log.error("发送人,接收人,主题,内容均不可为空");returnResponseResult.error("发送人,接收人,主题,内容均不可为空")}StringUtils.isAnyBlank是Apache......
  • Docker 环境下 GPU 监控实战:使用 Prometheus 实现 DCGM Exporter 部署与 GPU 性能监控
    Docker环境下GPU监控实战:使用Prometheus实现DCGMExporter部署与GPU性能监控文章目录Docker环境下GPU监控实战:使用Prometheus实现DCGMExporter部署与GPU性能监控一查看当前GPU信息二dcgm-exporter部署1)Dockerrun运行2)Dockercompose运行三......
  • 【网络协议大花园】应用层 http协议的使用小技巧,用好了都不用加班,效率翻两倍(上篇)
    本篇会加入个人的所谓鱼式疯言❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......
  • SQLAlchemy入门:详细介绍SQLAlchemy的安装、配置及基本使用方法
    SQLAlchemy是一个流行的PythonSQL工具包和对象关系映射(ORM)框架,它为开发人员提供了一种高效、灵活的方式来与数据库进行交互。本文将详细介绍SQLAlchemy的安装、配置及基本使用方法,并通过代码示例和案例分析,帮助新手朋友快速上手。一、SQLAlchemy简介SQLAlchemy由MikeBa......
  • 使用git命令推送代码
    想要使用git命令,需要打开控制台,操作系统的终端,或者其他命令行工具。1.检查当前状态gitstatus这个命令会列出所有被修改、新增或删除的文件,以及哪些文件已经被暂存2.添加文件到暂存区要添加当前目录中的所有文件,使用.代替,命令如下:gitadd.或者只添加特定的文件:gitadd......
  • 《樱花校园模拟器》如何使用风灵月影修改器?十八项修改器风灵月影版全面教程
    《樱花校园模拟器》是一款基于《GTA》风格的游戏,但设定在一个日本高中的校园内。游戏允许玩家自由探索校园、完成任务等。关于“风灵月影修改器”,这是一个非官方的第三方工具,用于在游戏中实现一些原版不具备的功能或效果,比如无限生命值、快速移动等。使用教程如下:第一步:点击......
  • 《Fate:武士遗迹》风灵月影修改器使用教程:体验光影交织的夏日奇幻之旅
    《Fate:武士遗迹》是一款以《Fate》系列为背景的动作角色扮演游戏,玩家在游戏中可以体验到与系列作品中不同的故事线和角色。而“风灵月影”可能是指游戏中的某个特定模式或者是由玩家社区开发的一个修改器,用于增强或改变游戏体验。请注意,使用修改器可能会违反游戏的服务条款,导......
  • Spring Boot 之 Lombok 使用详解
    Lombok是一个Java库,它通过注解自动生成样板代码,例如getter、setter、构造函数、equals()、hashCode()等,从而减少代码冗余,提高开发效率。在SpringBoot项目中使用Lombok可以使代码更加简洁易读。本文将详细介绍Lombok在SpringBoot中的使用。1.添加Lombok依赖......
  • 【Spring Security OAuth2】- 【使用Spring MVC开发RESTful API】 异步处理rest服务
    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!阶段1、深入多线程阶段2、深入多线程设计模式阶段3、深入juc源码解析阶段4、深入jdk其余源码解析......
  • 【Spring Security OAuth2】- 【使用Spring MVC开发RESTful API】 使用切片拦截rest服
    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!阶段1、深入多线程阶段2、深入多线程设计模式阶段3、深入juc源码解析阶段4、深入jdk其余源码解析......