CMakeLists.txt 文件详解

news2024/11/20 15:15:39

目录

CMakeLists.txt

常见内容和结构:

文件中的命令和配置:

官方文档:



 

CMakeLists.txt

CMakeLists.txt 文件是用于描述 CMake 构建过程和项目配置的文件。它包含了一系列 CMake 命令、变量设置和流程控制结构,用于告诉 CMake 如何生成适合你的平台和编译器的构建系统文件。

常见内容和结构:

  1. 项目名称:使用 project() 命令指定项目的名称,例如:

    project(MyProject)

  2. 最低版本要求:使用 cmake_minimum_required() 命令指定 CMake 的最低版本要求,例如:

    cmake_minimum_required(VERSION 3.12)

  3. 设置编译选项:使用 set() 命令来设置编译选项,例如:

    set(CMAKE_CXX_STANDARD 11) set(CMAKE_BUILD_TYPE Debug)

  4. 添加源文件和目标:使用 add_executable()add_library() 命令来添加源文件和生成可执行文件或库,例如:

    add_executable(myapp main.cpp utils.cpp) add_library(mylib mylib.cpp)

  5. 链接其他库:使用 target_link_libraries() 命令来链接其他库到目标,例如:

    target_link_libraries(myapp mylib)

  6. 包含目录和库文件目录:使用 include_directories()link_directories() 命令来指定包含目录和库文件目录,例如:

    include_directories(include) link_directories(lib)

  7. 寻找和链接依赖库:使用 find_package() 命令来寻找和配置依赖库,例如:

    find_package(Boost REQUIRED COMPONENTS system filesystem) target_link_libraries(myapp ${Boost_LIBRARIES})

  8. 条件判断和循环:可以使用条件判断和循环结构来根据不同的条件执行不同的操作,例如:

    if (ENABLE_FEATURE_A) add_definitions(-DFEATURE_A) endif() foreach(source_file ${SOURCE_FILES}) # 处理每个源文件 endforeach()

  9. 其他命令和配置:CMake 提供了许多其他命令和配置选项,可以根据具体需求进行配置,如设置输出路径、定义宏、配置测试等。

编写 CMakeLists.txt 文件时,可以将其组织成多个模块,使用 include() 命令引入其他模块文件,以便更好地组织和管理项目的构建过程。

在命令行中使用 cmake 命令时,指定 CMakeLists.txt 文件的路径,CMake 会读取该文件并根据其中的命令和配置生成相应的构建系统文件(如 Makefile、Visual Studio 解决方案等)。然后,使用生成的构建系统文件进行构建操作。

文件中的命令和配置:

当你编写 CMakeLists.txt 文件时,还可以使用其他命令和配置选项来满足特定的需求。

  1. 添加编译器选项:使用 add_compile_options() 命令来添加特定的编译器选项,例如:

    add_compile_options(-Wall -Wextra)

  2. 设置输出路径:使用 set() 命令来设置可执行文件和库文件的输出路径,例如:

    set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)

  3. 宏定义:使用 add_definitions() 命令来添加宏定义,例如:

    add_definitions(-DDEBUG_MODE)

  4. 配置测试:使用 enable_testing() 命令启用测试,并使用 add_test() 命令来添加测试,例如:

    enable_testing() add_test(NAME mytest COMMAND myapp --test)

  5. 导入和导出库:使用 export()import() 命令来导出和导入库,以便在其他项目中使用,例如:

    export(TARGETS mylib FILE MyLibTargets.cmake) import(MyLibTargets.cmake)

  6. 安装规则:使用 install() 命令来定义安装规则,指定需要安装的文件和目录,例如:

    install(TARGETS myapp DESTINATION bin) install(FILES myheader.h DESTINATION include)

  7. 外部项目依赖管理:使用 ExternalProject 模块或 FetchContent 模块来管理外部项目的依赖,例如:

    include(ExternalProject) ExternalProject_Add(mylibrary SOURCE_DIR ${CMAKE_SOURCE_DIR}/external/mylibrary PREFIX ${CMAKE_BINARY_DIR}/external/mylibrary INSTALL_DIR ${CMAKE_BINARY_DIR}/external/mylibrary )

  8. 自定义模块和函数:你可以编写自定义的 CMake 模块和函数来扩展和定制 CMake 的功能,例如:

    function(my_custom_function ARGUMENT) # 自定义功能的实现 endfunction() include(MyCustomModule.cmake) my_custom_function(VALUE)

这些只是 CMakeLists.txt 文件中的一些常见命令和配置选项,CMake 提供了更多的功能和灵活性,可以根据项目需求进行进一步的配置和定制。

官方文档:

最佳实践是通过阅读 CMake 的官方文档、示例项目和其他资源来深入了解 CMake 的功能和用法。这将帮助你更好地理解如何编写高效和可维护的 CMakeLists.txt 文件,以及如何使用 CMake 构建和管理项目。

下面是cmake的官网教程:CMake Tutorial | CMake

 

它的文档教程就这这里:cmake(1) — CMake 3.26.4 Documentation

 善用查找文档,才能更好的解决问题和提出问题,对于项目中遇到的情况,才能更加游刃有余。=v=.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/584508.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pycharm中关于debug模式中按钮的介绍

文章目录 前言一、pycharm中debug的按钮介绍(横排按钮)二、pycharm中debug的按钮介绍(竖排按钮)总结 前言 遇到了debug模式下的调试按钮问题。 一、pycharm中debug的按钮介绍(横排按钮) 步过:s…

七人拼团系统开发模式,助力企业三个月新增超十万会员!

现在市场上最不缺的就是好产品,产品在市场上目前已经趋于饱和。要想让自己的产品或企业快速打入市场,最好的办法是结合好的营销模式,让企业快速起步裂变提升销量。现在就有这么一款模式,助力企业在三个月内就新发展了超十万会员&a…

MySql高可用方案

MySql高可用方案 1、主从、主主(互为主从)keepalived 2、MHA MHA(Master High Avaliable) 是一款 MySQL 开源高可用程序,MHA 在监测到主实例无响应后,可以自动将同步最靠前的 Slave 提升为 Master,然后将其他所有的 S…

【JavaSE】Java基础语法(三十三):File 一文详解

文章目录 1. File类概述和构造方法2. 绝对路径和相对路径3. File类创建功能【应用】4. File类删除功能【应用】5. File类判断和获取功能【应用】6. 6File类练习一【应用】7. File类练习二【应用】 1. File类概述和构造方法 File类介绍 它是文件和目录路径名的抽象表示文件和目录…

阿里面试测试工程师,水太深,我把握不住了......

前言 去阿里面试测试工程师,这里面水太深,什么未来规划,职业发展的东西都是虚拟的,作者还太年轻,没有那个经历,把握不住。项目只有几个,开心快乐就行,不PK,文明PK。 很多…

组合总和 II

1题目 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含重复的组合。 示例 1: 输入: candidates [10,1…

搭建LightPicture开源免费图床系统「公网远程控制」

文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 转载自cpolar极点云的文章:【搭建私人图床】使用LightPicture开源…

Parasoft亮相上海国际嵌入式展

全球自动化软件测试解决方案的领导者Parasoft宣布参加6月14日至16日在上海举行的首届embedded world China上海国际嵌入式展,此次Parasoft联合检测认证领域的领导者-莱茵技术(上海)有限公司共同参展,为嵌入式行业提供符合功能安全…

电子表格的武侠江湖里,有VBA加持的Excel,也只能算一把菜刀

Excel,都用过吧? 没用过肯定也听说过。 这可是Windows里颇具传奇色彩的软件,堪称一把九天陨铁淬炼而成的菜刀。 普通人,用它做表格, 进行简单的数据汇总。 职场人,继续用它做表格, 开始求和…

请问下大家PMP证书值得考嘛?

做项目的去考,项目经理、产品经理这些,或者有往项目管理领域发展的去考。其他行业有空可以学习下 不一定要考证了。 PMP证书更多的是 “敲门砖”作用,大部分公司招聘的门槛都要去了这个证书。 当然现在PMP管理模式也很热门,各大…

国产的高精度ADC HX711 CS1237 TM7707等如何选型

最近小伙伴们咨询我,国产很多高精度的ADC,如何选型使用呢?这里我们主要讨论几款24位差分输入。 ADC/DAC相关名词解释 ADC输入范围ADC转换速度ADC稳定位数 在我们选的时候主要考虑上面三个参数 ADC参数对比 型号输入范围输出速率建立时间PG…

网页JS自动化脚本(八)使用网页专属数据库indexedDB进行数据收集

我们在网页上进行的活动,往往都需要进行收集一些简单的数据,但是因为浏览器的安全原因,浏览器基本上是无法与本地的操作系统直接产生数据交互的,这本来就是一个由于安全问题生产的无解问题,在浏览器里面是内置了几种数据库的,其中一种就是indexedDB,可以用来储存一些非常小的数…

多主题插件上线!开源的 API 管理工具居然这么有意思!

之前我一直在用的开源API 管理工具——Postcat 最近上线了新的主题插件,真的有意思! 之前就用用户提 issue 没想到终于安排上了,给这个项目点赞! 挑几款我偏好的主题插件,简单看看 第一款,【VSCode 主题】&…

鸿蒙Hi3861学习二十-编译构造

一、简介 在使用编译构造子系统前,应了解如下基本概念: 子系统 子系统是一个逻辑概念,它由一个或多个具体的组件构成、OpenHarmony整体遵从分层设计,从下向上依次为:内核层、系统服务层、架构层和应用层。系统功能按照…

电商用户行为分析__求前3点击量

测试代码 package Data_textimport org.apache.flink.streaming.api.TimeCharacteristic import org.apache.flink.streaming.api.functions.timestamps.BoundedOutOfOrdernessTimestampExtractor import org.apache.flink.streaming.api.scala._ import org.apache.flink.st…

KWin事件总结和相关类介绍

KWin事件总结和相关类介绍 目录 KWin事件总结和相关类介绍 1、事件相关模块 1.1 事件类型 1.2 事件管理 1.3 事件过滤器 2、KWin其他模块整理 2.1 窗口 2.2 Item 2.3 scene 3、事件传递流程 3.1 事件整体流程 3.2 事件传递时序图 4、事件流程样例 4.1 鼠标拖动修…

英伟达发布 532.03 驱动,为新游戏和新显卡带来支持

继英伟达 RTX 4060系列显卡陆续发售后,又发布了 GeForce Game Ready 532.03 WHQL 驱动,驱动人生整理了一下NVIDIA GeForce Game Ready 532.03 WHQL 驱动带来的支持与优化。 GeForce Game Ready 532.03 WHQL 驱动主要同步支持 RTX 4060 Ti 8G 显卡&#…

Hadoop3.1.4分布式搭建

Hadoop3.1.4分布式搭建 1. 基础环境准备 1.1 实验网络规划 hostnameip addrroleotherk8s-m13310.10.10.133NameNode, DataNode, NodeManageerk8s-m13410.10.10.134SecondaryNameNode, DataNode, NodeManageerk8s-m13510.10.10.135ResourceManager, DataNode, NodeManageerk8…

Java 多线程基础

文章目录 Java 多线程基础一、相关概念1. 程序、进程和线程2. 线程调度3. 并行与并发 二、线程的创建1. 继承 Thread 类2. 实现 Runnable 接口3. 实现 Callable 接口4. 线程池 三、Thread 类常用方法1. 构造方法2. 常用方法3. 其他方法 四、线程的生命周期五、线程同步1. 线程安…

Serverless 是什么?

文章目录 Serverless 是什么?Serverless 的前世今生面临挑战以应用为中心,无需运营基础架构自动伸缩为价值付费内置高可用和高安全 Serverless 行业及应用场景IT 自动化数据处理微服务架构IoT 后端系统游戏 Serverless 解决方案推荐SaaS Boot适合客户方案…