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

Cmake的基本语法操作

1.vsc中使用cmake      

    1.1前言

       1) Cmake是一个跨平台的安装编译工具,可以使用简单的语句来描述所有平台的安装(编译过程)

        2)Cmake可以说是已经成为大部分C++项目开发的标配了

        3)可以使用几行或者几十行的代码来完成非常冗长的Makefile代码

     1.2为什么要使用Cmake

          1)在不使用在不使用CMake时,编译工程如下

        2> 在上面的机制中,工程文件中添加一个源程序 bar.cpp
3> 使用 CMake 来管理工程的状态
4> 使用 CMkake管理工程中添加一个新文件 bar.cpp

     1.3语法特性介绍

1)基本语法:指令(参数1 参数2....)
参数使用括号括起来
参数之间使用空格或分号隔开
2)注意:指令是大小写无关的,但是参数和变量是大小写相关的
set(HELLO hello.cpp)                #定义一个变量名叫HELLO         变量的值为hello.cpp
add_executable(hello main.cpp hello.cpp)                #通过main.cpp和hello.cpp编译生成hello 可执行文件
ADD_EXECUIABLE(hello main.cpp $(HELLO))              #作用同上
3)变量使用$()进行取值,但是在if控制的语句中,是直接使用变量名的
if(HELLO)是正确的
if($(HELLO))是不正确的
4)语句不以分号结束

    1.4重要的指令

1)cmake_minimum_required:指定Cmake的最小版本支持,一般作为第一条cmake指令
#Cmake设置最小支持版本为208
cmake_minmum_require(VERSION 2.8)
2)project:定义工程的名称,并可以指定工程支持的语言
#指定工程的名称为HELLOWORLD
project(HELLOWORLD CXX)              #表示工程名为HELLOWORLD 使用的语言为C++
3)set:显示定义变量
#定义变量 SRC其值为 sayhello.cpp hello.cpp
set(SRC sayhello.cpp hello.cpp)
4)add_executable:通过依赖生成可执行程序
#编译main.cpp 生成main的可执行程序
add_executable(main main.cpp)
5)include_directories:向工程添加多个特定的头文件搜索路径,类似于g++编译指令中的 -i
#将/usr/lib/mylibfolder 和 ./include添加到工程路径中
include_directories(//usr/lib/mylibfolder 和 ./include)
6)link_directories:向工程中添加多个特定的库文件搜索路径,类似于g++编译指令中的-L
#将/usr/lib/mylibfolder 和 ./lib添加到库文件搜索路径中
link_directories(/usr/lib/mylibfolder  ./iib)
7)add_library:生成库文件(包括静态库和动态库)
#通过SRC变量中的文件,生成动态库
add_library(hello SHARED$(SRC))        #该语句生成的是动态库
add_library(hello STATIC$(SRC))            #该语句生成的是静态库
8)add_compile_options:添加编译参数
#添加编译参数:-wall -std=C++11
add_compile_options(-wall -std=c++11)
9)target_link_libraries:为target添加需要连接的共享库,类似于g+编译指令中的-l指令
#将hello 动态库文件链接到可执行程序main中
target_link_libraries(main hello )

    1.5  Cmake常用的变量

1)CMAKE_C_FLAGS:gcc编译选项的值
2)CMAKE_CXX_FLAGS:g++编译选项的值
#在CMAKE_CXX_FLAGS编译选项后面追加 -std=c++11
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  -std=c++11")
3)CMAKE_BUILD_TYPE:编译类型(Debug,Release)
#设定编译类型为Debug,调试时需要选择该模式
set(CMAKE_BUILD_TYPE Debug)
#设定编译类型为Release,发布需要选择该模式
set(CMAKE_BUILD_TYPE Release)

2.Cmake编译工程

Cmake目录结构:项目主目录中会放一个CMakeList.txt的文本文档,后期使用cmake指令时,依赖的就是该文档
1)包含源文件的子文件夹中包含CMakeList.txt文件时,主目录的CMakeList.txt要通过add_subdirector添加子目录
2)包含源文件的子文件夹中不包含CMakeList.txt文件时,子目录编译规则,体现子啊主目录的CMakeList.txt

   2.1两种构建方式

1)内部构建:不推荐使用
内部构建会在主目录下,产生一大堆中间文件,这些中间文件并不是我们最终所需要的,和工程源文件放在一起时,会显得比较杂乱
##内部构建
#在当前目录下,编译生主目录下的CM艾克List.txt文件生成Makefile文件
camke .                 #表示当前路径
#执行make命令,生成目标文件
make
2)外部构建:推荐使用
将编译输出的文件与源文件放到不同的目录下,进行编译,此时,编译生成的中间文件,不会跟工程源文件进行混淆
#外部构建步骤
#1.在当前目录下,创建一个bulid文件,用于储存生成的中间文件
mkdir build
#2.进入build文件夹内
cd build 
#3.编译上一级目录中的CMakeList.txt,生成Malefile问价以及其他文件
cmake ..     #..表示上一级目录
#4.执行make命令,生成可执行程序
make

http://www.mrgr.cn/news/17936.html

相关文章:

  • 基于Java+MySQL实现在线书店订购系统
  • 第11章 第9节 基于软件质量特性的测试(软件评测师)
  • 米家“智能中枢网关”和“智能多模网关”有什么区别?
  • 三十一、gorm快速入门
  • AI Agent开发实战1-Agent开发绪论与国产大模型的架构与工作机制原理
  • 自闭症自言自语会好吗
  • Vue(十一)默认插槽、具名插槽、作用域插槽
  • 同事用10分钟给公司做了一套数据大屏,实力选手非他莫属!
  • 实现一个队列
  • 设施农业气象站
  • js-浏览器沙箱
  • LongWriter环境安装推理测试
  • sportbugs报告路径在linux和windows中的配置差异
  • 要点(Key Ideas)
  • 基于PCL实现RGB-D图像转换为点云
  • Mybatis-Mapper扫描 与 代理
  • 工业储能柜内部运行状态监测装置
  • LaViT:这也行,微软提出直接用上一层的注意力权重生成当前层的注意力权重 | CVPR 2024
  • 海外广告投放成功的关键点有哪些?
  • 无法正常安装Sass预处理器