首页 > 其他分享 >CMakeLists.txt编写思路

CMakeLists.txt编写思路

时间:2024-07-11 23:26:03浏览次数:9  
标签:可执行文件 CMakeLists add 指令 编写 txt 添加

    近期在linux编写CMakeLists.txt文件,整理了一些思路。

一、编写CMakeLists.txt的基本步骤和思路:

  1. 初始化CMake

    • 使用cmake_minimum_required指令指定CMake的最小版本要求,以确保兼容性。
    • 使用project指令定义项目名称和可选的语言。
  2. 设置变量

    • 使用set指令设置项目相关的变量,例如编译器标志、包含目录、库目录等。
  3. 添加子目录

    • 使用add_subdirectory指令包含项目中的子目录,这些子目录通常包含自己的CMakeLists.txt文件。
  4. 添加可执行文件或库

    • 使用add_executable指令添加可执行文件,并指定其源文件。
    • 使用add_library指令添加静态或共享库,并指定其源文件。
  5. 设置依赖关系

    • 使用target_link_libraries指令为目标添加必要的依赖库。
  6. 配置编译选项

    • 使用add_compile_optionsset指令添加编译器特定的优化或警告选项。
  7. 配置安装规则

    • 使用install指令配置项目文件的安装位置和规则。
  8. 测试

    • 如果项目包含测试,可以使用enable_testingadd_test指令来配置和添加测试。
  9. 清理和打包

    • 使用clean_policyconfigure_file等指令来清理构建环境或准备打包。

       还需要注意的是:清晰的逻辑结构,确保所有的依赖关系和构建步骤都被正确配置。此外,应该考虑到跨平台构建的需求,使用条件编译和检查来处理不同操作系统或编译器的特性差异。

二、示例

    展示了如何为一个包含单个可执行文件和一个静态库的项目配置CMake构建系统。

项目结构

假设有以下项目结构:

MyProject/
├── CMakeLists.txt
├── src/
│   └── main.cpp
└── lib/
    └── math_utils.cpp
    └── math_utils.hpp
CMakeLists.txt内容

在项目的根目录下创建CMakeLists.txt文件,并填写以下内容:

cmake_minimum_required(VERSION 3.21)
project(MyProject)

# 设置变量指向源代码和头文件目录
set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(HEADERS_DIR ${SOURCE_DIR}/src)
set(LIBS_DIR ${SOURCE_DIR}/lib)

# 添加源文件到变量中
aux_source_directory(src SRC_LIST)
aux_source_directory(lib LIB_LIST)

# 创建可执行文件
add_executable(my_program ${SRC_LIST})

# 创建静态库
add_library(math_utils STATIC ${LIB_LIST})

# 将静态库链接到可执行文件
target_link_libraries(my_program math_utils)
构建说明
  1. cmake_minimum_required指定了CMake的最小版本要求,以确保兼容性。
  2. project定义了项目名称。
  3. set指令用于设置项目相关的变量,指向源代码和头文件目录。
  4. aux_source_directory命令递归地查找指定目录下的源文件,并将它们添加到列表变量中。
  5. add_executableadd_library分别用于创建可执行文件和静态库,并指定它们的源文件列表。
  6. target_link_libraries用于将静态库链接到可执行文件。
编译项目

在终端中,进入项目的根目录,创建一个名为build的目录,并在该目录中运行CMake来配置项目:

mkdir build
cd build
cmake ..

之后,运行make来编译项目:

make

编译完成后,可执行文件my_program将位于build目录下,您可以通过以下命令运行它:

./my_program

标签:可执行文件,CMakeLists,add,指令,编写,txt,添加
From: https://blog.csdn.net/icon_sunshine/article/details/140363772

相关文章

  • Java基础,面向对象,类与对象,全局和局部变量,三大特征--封装,构造方法,JavaBean的编写---入
    一.面向对象面向过程和面向对象的区别     面向过程:强调步骤    面向对象:强调对象,对象洗衣机帮我们完成举例:洗衣服面向过程:面向对象:脱衣服->打开洗衣机->按钮->晾衣服面向对象的三大特征-----封装,继承,多态对象:万物皆可对象类:一组相关属性和行为的集......
  • Python-NumPy 库编写复杂程序
    1、解释说明NumPy是一个用于Python编程语言的库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy是开源的,并且广泛地使用于各种科学计算和数据分析领域。NumPy的核心功能如下:-ndarray(N-dimensionalarrayobject):一个具有向量运算能力的快......
  • 【ROS2】中级-编写动作服务器和客户端(C++)
    目标:用C++实现一个动作服务器和客户端。教程级别:中级 时间:15分钟 目录 背景 先决条件 任务1.创建custom_action_cpp包2.编写动作服务器3.编写动作客户端 摘要 相关内容 背景动作是ROS中异步通信的一种形式。动作客户端向动作服务器发送目标请求。动作......
  • 4.1 开始编写Jenkinsfile
    为什么使用pipeline?本质上,jenkins是一个自动化引擎,它支持许多自动模式。流水线向Jenkins添加了一组强大的工具,支持用例、简单的持续集成到全面的持续交付流水线。通过对一系列的发布任务建立标准的模板,用户可以利用更多流水线的特性,比如:代码化:流水线是在代码中实现的,通常会......
  • 如何编写详细的漏洞报告
    一、概述无论是做漏洞研究还是做安全测试,最终都需要以文本的方式将安全漏洞的信息呈现给需要理解漏洞的人,这个人可能是漏洞相关产品所在机构的审核人员,也可能是漏洞所属产品的研发人员,或者是产品经理之类的决策或管理人员。一份详细且恰当的漏洞报告可以减少漏洞发现者或提交者......
  • 编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数, 在
    /编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。只要结果,别输出什么提示信息。/#include<stdio.h>#include<string.h>#include<ctype.h>intfun(char*buff){intsum=0;while(*buff......
  • 编写代码检查规则的神器,解读CodeNavi语法结构
    本文分享自华为云社区《CodeNavi规则的语法结构》,作者:Uncle_Tom。1.代码和检查规则1.1.代码的构成程序是由空格分隔的字符串组成的序列。在程序分析中,这一个个的字符串被称为"token",是源代码中的最小语法单位,是构成编程语言语法的基本元素。Token可以分为多种类型,常见的有......
  • nodejs编写退出登录的接口逻辑
    目录1.安装必要的依赖2.登录成功生成和返回JWT3.在服务器端维护一个黑名单列表,记录已失效的JWT4.在验证JWT时检查黑名单5.退出登录时将JWT添加到黑名单中完整代码nodejs实现退出登录接口的逻辑,通常包括以下步骤:安装必要的依赖登录成功生成和返回JWT。在服务器......
  • 编写优雅Python代码的20个最佳实践
    想要让你的代码像艺术品一样既实用又赏心悦目吗?今天我们就来聊聊如何通过20个小技巧,让你的Python代码从平凡走向优雅,让同行看了都忍不住点赞!**温馨提示:更多的编程资料,领取方式在:1.拥抱PEP8实践:遵循PEP8编码规范,比如行宽不超过79字符,使用空格而不是制表符缩进。......
  • 编写 PowerShell 脚本来管理 Windows 防火墙可以帮助自动化配置和监控网络安全设置。
    编写PowerShell脚本来管理Windows防火墙可以帮助自动化配置和监控网络安全设置。以下是一个简单的大纲,涵盖了管理Windows防火墙的主要方面:1.导入模块和设置变量导入 NetSecurity 模块以访问防火墙cmdlet。设置需要使用的变量,如规则名称、端口号等。2.查询和列出......