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

CMake使用【c/c++】

目录

一.CMake概述

二.CMake的使用

1.注释

2.只有一个源文件的程序编译

3.set

4.搜索文件

5.指定头文件


一.CMake概述

CMake是一个跨平台的项目构建的工具。(Build System Generator)。 它不直接编译代码,而是根据简单的配置文件(CMakeLists.txt),为你熟悉的编译环境(如 Make)生成相应的构建文件(如 Makefile项目文件)。

二.CMake的使用

1.注释

可以使用 进行单行注释

#这是一个CMakeLists.txt的文件

也可以使用 #[ [ ] ] 进行块注释

#[[这是一个CMakeLists.txt的文件
这是一个CMakeLists.txt的文件
这是一个CMakeLists.txt的文件]]

2.只有一个源文件的程序编译

  • 首先准备一些文件来方便讲解
//add.h
#ifndef __MY_ADD__
#define __MY_ADD__int add(int,int);#endif
//add.cc
#include"add.h"int add(int a,int b)
{return a+b;
}
//sub.h
#ifndef __MY_SUB__
#define __MY_SUB__int sub(int,int);#endif
//sub.cc
#include"sub.h"int sub(int a,int b)
{return a-b;
}
//main.cc#include<iostream>
#include"add.h"
#include"sub.h"using namespace std;int main()
{int x=1,y=2;cout<<add(x,y)<<endl;cout<<sub(x,y)<<endl;return 0;
}
  • 在上述目录下面添加一个CMakeLists.txt的文件,注意大小写。内容如下
cmake_minimum_required(VERSION 3.14)
project(test)
add_excutable(main main.cc;add.cc;sub.cc)

cmake_minimum_quired

cmake_minimum_quired的作用是指定当前cmake的最小版本,如果当前版本小于指定的版本,会报错

project

定义工程名称,并可指定工程的版本、工程描述、web主页地址、支持的语言(默认情况支持所有语言),如果不需要这些都是可以忽略的,只需要指定出工程名字即可。

add_excutable(生成的可执行程序名 源文件)

生成一个可执行程序。注意:可执行程序名与项目名称没有关系,同时,如果有多个原文件,他们可以用空格或者隔开。

  • 接下来直接cmake

我们可以看到,当cmake之后,会生成一个Makefile的文件,然后我们直接make,就能生成可执行程序。

注意:

  • cmake后面要带路径,该路径是CMakeLists.txt所在的路径。
  • 同时,直接在CMakeLists.txt这个目录生成makefile文件时,也会生成其他的几个文件,他会干扰我们找其他文件比如源文件,因此,我们可以在当前目录下创建一个build目录,在build目录下面cmake,生成的其他文件就会在build目录下。

3.set

1.set 可以设置变量

cmake_minimum_required(VERSION 3.14)
project(test)
set(SRC main.cc add.cc sub.cc)
add_executable(main ${SRC})
#set 可以把main.cc add.cc sub.cc 设置为SRC变量 然后用于add_excutable 

2.指定使用c++的标准,比如C++98 C++11 C++17 C++20 等

cmake_minimum_required(VERSION 3.14)
project(test)
#指定使用c++11
set(CMAKE_CXX_STANDARD 11)
add_executable(main main.cc;add.cc;sub.cc)

3.指定可执行程序的存放路径(如果没有路径,会自己创造)

cmake_minimum_required(VERSION 3.14)
project(test)
#放在自己的家目录
set(EXCUTABLE_OUTPUT_PATH /home/username)
add_executable(main main.cc;add.cc;sub.cc)

4.搜索文件

在构建项目时,我们经常遇见原文件太多的时侯。这时只能把所有文件写在add_excutable上,有没有什么办法能解决这个问题呢。

1.aux_source_directories(路径名 变量)

这个命令会把路径下的所有源文件存储到变量当中

cmake_minimum_required(VERSION 3.14)
project(test)
aux_source_directories(${CMAKE_CURRENT_SOURCE_DIR} SRC)
add_executable(main SRC)

2.file(GLOB/GLOB_RECURSE 变量名 要搜索的文件路径和文件类型)

  • GLOB 表示就在该目录下搜索
  • GLOB_RECURSE 表示会在该目录下递归的搜索
cmake_minimum_required(VERSION 3.14)
project(test)
#注意和aux_source_directories相比,file要加文件的类型,所谓的类型其实就是后缀名
file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cc)
add_executable(main SRC)

CMAKE_CURRENT_SOURCE_DIR 宏表示当前访问的 CMakeLists.txt 文件所在的路径。

5.指定头文件

include_directories(头文件所在的路径)

在编译源文件的时候,有时候需要指定头文件所在的路径,这时就可以使用include_directories这个命令

cmake_minimum_required(VERSION 3.14)
project(test)
file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cc)
file_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
add_executable(main SRC)

http://www.dtcms.com/a/343091.html

相关文章:

  • 2025Java面试红皮书:1000道BAT真题详解
  • plc与plc无线通讯实现PLC1200和ET200SP无线通讯解决方案实践
  • uniapp 懒加载图片
  • 力扣面试150(62/150)
  • SAP FIORI Elements深度定制:注解扩展与审批流程增强完全指南
  • 软件工程 + AI 不是 “硬凑”,3 步走通落地关键环节
  • es6新语法
  • LLaVA-3D,Video-3D LLM,VG-LLM,SPAR论文解读
  • MySQL 时间筛选避坑指南:为什么格式化字符串比较会出错?
  • LMAD:用于可解释自动驾驶的集成端到端视觉-语言模型
  • 自动驾驶架构:人为接口与隐式特征的博弈
  • 杰里708n tws api 简介
  • K-Means 聚类算法详解与实战指南
  • QPS 每秒查询数
  • openEuler系统中如何将docker安装在指定目录
  • Qt5网络编程详细讲解
  • 僵尸进程和孤儿进程
  • Spring相关知识
  • 解决接口耗时长问题
  • 软考 系统架构设计师系列知识点之杂项集萃(130)
  • 上证50股指期货为何波动很小?
  • AP状态管理中提到的两种“业务逻辑”
  • 34、扩展仓储管理系统 (跨境汽车零部件模拟) - /物流与仓储组件/extended-warehouse-management
  • 家用电器,让现代家庭生活更美好
  • 华为云ModelArts+Dify AI:双剑合璧使能AI应用敏捷开发
  • 红日靶场5
  • 有鹿机器人:智慧清洁新时代的引领者
  • 今天,字节开源Seed-OSS-36B模型,512k上下文
  • es6常用方法来解决功能需求
  • 【LeetCode题解】LeetCode 240. 搜索二维矩阵 II