当前位置: 首页 > news >正文

CMake学习

CMakeLists.txt

PROJECT (Hello)
SET(SRC_LIST main.cpp)
MESSAGE(status "Binary dir: " ${PROJECT_BINARY_DIR})
ADD_EXECUTABLE(hello ${SRC_LIST})
  • PROJECT_BINARY_DIRPROJECT_SOURCE_DIR是两个预定义变量

  • SET (SRC_LIST main.cpp)定义变量以及其内部值

  • MESSAGE向终端输出用户自定义信息,信息包括三种

    • SEND_ERROR:产生错误,生成过程被跳过
    • STATUS:输出前缀为-的信息
    • FATAL_ERROR:立即终止所有cmake过程

cmake指令

  • cmake -B build -G "Unix Makefiles"
    • -B 表示要将构建中的过程文件都生成到指定文件内
    • -G 表示指定构建系统
    • 上述会在指定的build文件夹中生成包括Makefiles文件在内的众多文件
    • 再执行make就可以生成目标文件了
  • cmake --build .在当前文件夹下找到Makefiles文件来执行make后的效果是一样的
    • cmake --build ./build --config Release --target hello

变量set

写法:set(变量名 变量值)

  • 特殊变量
    • 指定使用C++标准:
      • 第一种方法,指定C++编译版本set(CMAKE_CXX_STANDARD 11/14/17/20),注意其中的数字只能写一个不能并写
        • 相当于在执行编译时使用参数-std=c++11
        • 指定C编译版本:set(CMAKE_C_STANDARD 11)
      • 第二种方法:在使用cmake命令时指定,例如cmake CMakeLists.txt文件路径 -DCMAKE_CXX_STANDARD=11/14/17
        • -D代表指定一个宏
    • 可执行程序输出路径set(EXECUTABLE_OUTPUT_PATH ${HOME}/bin),如果路径不存在会自动创建
      • 在此之前设置set(HOME /home/robin/build)
      • 建议这个路径使用绝对路径

CMake构建大型c++项目

# first-cmake
# 指定编译版本
cmake .. -DCMAKE_CXX_STANDARD=11
  • 执行cmake:
    • cmake -S . -B build
      • -S是指定查找CMakelist.txt文件路径,-B是指令生成所有文件到指定目录build下,如果没有创建build文件夹,会自动创建
    • cmake --build build(好像不好用)
      • 不用进入build文件夹而开始编译
http://www.dtcms.com/a/46244.html

相关文章:

  • 计算机毕设JAVA——某高校宿舍管理系统(基于SpringBoot+Vue前后端分离的项目)
  • 有关Java中的集合(1):List<T>和Set<T>
  • 本地部署 DeepSeek:从 Ollama 配置到 Spring Boot 集成
  • 第十章——数组
  • DeepSeek开源周Day6:DeepSeek V3、R1 推理系统深度解析,技术突破与行业启示
  • 基于微信小程序的疫情互助平台(源码+lw+部署文档+讲解),源码可白嫖!
  • [Lc优选算法] 双指针 | 移动零 | 复写零 | 快乐数
  • 从0搭建Tomcat第二天:深入理解Servlet容器与反射机制
  • 在QML中注册C++类型
  • 如何学习人工智能(如Transformer架构和DeepSeek等)
  • JavaFunction的使用
  • 在2023idea中如何创建SpringBoot
  • 大数据-240 离线数仓 - 广告业务 测试 ADS层数据加载 DataX数据导出到 MySQL
  • 建筑兔零基础自学python记录35|编程练习1
  • 首页分包,跳转,以及分类导航区
  • 六十天前端强化训练之第一天到第七天——综合案例:响应式个人博客项目
  • FPGA开发,使用Deepseek V3还是R1(2):V3和R1的区别
  • 207. 课程表(dfs)
  • 肖恩的n次根 (二分)
  • Spring Boot拦截器(Interceptor)与过滤器(Filter)详细教程
  • uni.getLocation 微信小程序中获取位置失败原因
  • 《论软件测试中缺陷管理及其应用》审题技巧 - 系统架构设计师
  • 利用PyQt简单的实现一个机器人的关节JOG界面
  • 行为型模式 - 迭代器模式 (Iterator Pattern)
  • SpringCloud + Spring AI Alibaba 整合阿里云百炼大模型
  • 【大模型】大模型推理部署工具之vLLM的使用(1)
  • 在Nginx上配置并开启WebDAV服务的完整指南
  • AI赋能教育:用智能体点亮教育的温度
  • 【Python】OpenCV算法使用案例全解
  • 【Java】JDK17新特性