首页 > 其他分享 >CMake简易教程

CMake简易教程

时间:2024-09-19 10:47:53浏览次数:8  
标签:... 教程 CMake SOURCE PROJECT 简易 add DIR

  1. CMake概述。

    CMake是一个项目构建工具,并且跨平台。Vs的 nmake, Linux下的Gun make, Qt的qmake等很多IDE软件都支持。

    CMake的主要优点有:

    • 夸平台

    • 能管理大型项目

    • 简化编译构建过程和编译过程

    • 可扩展:可以为cmake编写特定功能的模块,扩充cmake功能

  2. CMake的使用

CMake支持大写、小写、混合大小写的命令。如果在编写CMakeLists.txt文件时使用的工具有对应的命令提示,那么大小写随缘即可,不要太过在意。

  1. 注释

# 这是一个 CMakeLists.txt 单行注释

#[[ 这是一个 CMakeLists.txt 文件 的多汗注释。
这是一个 CMakeLists.txt 文件
这是一个 CMakeLists.txt 文件]]
cmake_minimum_required(VERSION 3.0.0)
  1. 常用命令

#指定使用的 cmake 的最低版本
cmake_minimum_required(VERSION 3.0)
#项目名称
project(app)

#[[add_executable:定义工程会生成一个可执行程序 
add_executable(可执行程序名 源文件名称)]]
add_executable(app main.cpp)

#set 定义变量 空格间隔
set(SRC_LIST a.cpp b.cpp c.cpp)
#set 定义变量 ;间隔
set(SRC_LIST a.cpp;b.cpp;c.cpp)

#搜索文件===========================================================
#1: aux_source_directory(< dir > < variable >)
#[[
    dir:要搜索的目录
    variable:将从dir目录下搜索到的源文件列表存储到该变量中]]
#搜索CMakeLists.txt当前文件夹下的/src内的所有文件并赋值给SRC_LIST
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SRC_LIST)

#2:file(GLOB/GLOB_RECURSE 变量名 要搜索的文件路径和文件类型)
#[[
    GLOB: 将指定目录下搜索到的满足条件的所有文件名生成一个列表,并将其存储到变量中。
    GLOB_RECURSE:递归搜索指定目录,将搜索到的满足条件的文件名生成一个列表,并将其存储到变量中。
]]
file(GLOB APPSRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
file(GLOB APPHEAD ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h)

#包含头文件=================================================================
#include_directories(headpath)
include_directories(${PROJECT_SOURCE_DIR}/include)

#包含静态库文件===============================================================
#指定静态库文件地址
#link_directories(<lib path>)
#连接静态文件库
#link_libraries(<static lib> [<static lib>...]) 
# 搜索指定目录下源文件
file(GLOB SRC_LIST ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
# 包含头文件路径
include_directories(${PROJECT_SOURCE_DIR}/include)
# 包含静态库路径
link_directories(${PROJECT_SOURCE_DIR}/lib)
# 链接静态库
link_libraries(app ${SRC_LIST}) 
    
#包含动态库文件===============================================================
#[[target_link_libraries(
    <target> 
    <PRIVATE|PUBLIC|INTERFACE> <item>... 
    [<PRIVATE|PUBLIC|INTERFACE> <item>...]...)]]
add_executable(app main.cpp)
target_link_libraries(app my_dynamic_library)

#message消息日志提醒===============================================================
#message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] "message to display" ...)
#[[
    (无) :重要消息
    STATUS :非重要消息
    WARNING:CMake 警告, 会继续执行
    AUTHOR_WARNING:CMake 警告 (dev), 会继续执行
    SEND_ERROR:CMake 错误, 继续执行,但是会跳过生成的步骤
    FATAL_ERROR:CMake 错误, 终止所有处理过程
]]
# 输出一般日志信息
message(STATUS " path: ${PROJECT_SOURCE_DIR}")
# 输出警告信息
message(WARNING "path: ${PROJECT_SOURCE_DIR}")
# 输出错误信息
message(FATAL_ERROR "path: ${PROJECT_SOURCE_DIR}")

#变量操作追加=============================================================
#set(变量名1 ${变量名1} ${变量名2} ...)

#使用list拼接=============================================================
#数据追加
#list(APPEND <list> [<element> ...]) 
#数据追加
#list(REMOVE_ITEM <list> [<element> ...]) 
#获取 list 的长度。
#list(LENGTH <list> <output variable>) 
#读取列表中指定索引的的元素,可以指定多个索引
#list(GET <list> <element index> [<element index> ...] <output variable>)
#连接字符串
#list (JOIN <list> <glue> <output variable>)
#查找是否存在
#list(FIND <list> <value> <output variable>)

#制作动态库或静态库===========================================================
#静态库 add_library(库名称 STATIC 源文件1 [源文件2] ...) 
#动态库 add_library(库名称 SHARED 源文件1 [源文件2] ...) 
#add_library 默认是静态库
add_library(app STATIC ${SRCLIST})
add_library(app SHARED ${SRCLIST})

#嵌套的CMake================================================================
#add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
  1. 常用宏

功能
PROJECT_SOURCE_DIR 使用cmake命令后紧跟的目录,一般是工程的根目录
PROJECT_BINARY_DIR 执行cmake命令的目录
CMAKE_CURRENT_SOURCE_DIR 当前处理的CMakeLists.txt所在的路径
CMAKE_CURRENT_BINARY_DIR target 编译目录
EXECUTABLE_OUTPUT_PATH 重新定义目标二进制可执行文件的存放位置
LIBRARY_OUTPUT_PATH 重新定义目标链接库文件的存放位置
PROJECT_NAME 返回通过PROJECT指令定义的项目名称
CMAKE_BINARY_DIR 项目实际构建路径,假设在build目录进行的构建,那么得到的就是这个目录的路径
  • DCMAKE_CXX_STANDARD 使用哪个C++标准库
# DCMAKE_CXX_STANDARD 使用C++ 的哪个标准 C++11、C++14、C++17、C++20
#增加-std=c++11
set(CMAKE_CXX_STANDARD 11)

#也可以一在执行cmake时添加宏 -D:定义的宏赋值
cmake .. -DCMAKE_CXX_STANDARD=11
  • EXECUTABLE_OUTPUT_PATH 指定可执行程序输出的路径
#给HOME变量赋值:/home/gary/app/
set(HOME /home/gary/app/)
#EXECUTABLE_OUTPUT_PATH = /home/gary/app/bin
set(EXECUTABLE_OUTPUT_PATH ${HOME}/bin)
  • LIBRARY_OUTPUT_PATH 静态库输出路径

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

  • PROJECT_SOURCE_DIR 等同于 CMAKE_CURRENT_SOURCE_DIR CMakeLists.txt当前路径

标签:...,教程,CMake,SOURCE,PROJECT,简易,add,DIR
From: https://www.cnblogs.com/dingjiehui/p/18420141

相关文章

  • DevExpress中文教程:如何将WinForms数据网格连接到ASP. NET Core WebAPI服务?
    日前DevExpress官方发布了DevExpressWinForms的后续版本——将.NET桌面客户端连接到安全后端WebAPI服务(EFCorewithOData),在本文中我们将进一步演示如何使用一个更简单的服务来设置DevExpressWinForms数据网格。P.S:DevExpressWinForms拥有180+组件和UI库,能为WindowsForms......
  • 离线安装Python Library教程
    当你的设备不能联网,你该如何下载原来一行pip命令就能下载的Python库?别慌,没有你想象的那么麻烦。下面我将介绍常用的两种方法:通过源代码和通过wheel文件。一.通过wheel文件(.whl)首先搜索你想要下载的python库的pypi页面这里以numpy为例:进入页面后,点击Downloadfiles,进入......
  • 全面解读大模型备案流程及重点、难点解析【附教程】
    本文详解大模型备案流程,旨在指引企业和开发者顺利完成备案,确保企业成功拿到大模型备案号。一、政策要求做大模型备案大模型备案是中国国家互联网信息办公室为加强生成式人工智能服务的管理,确保用户权益得到充分保护,以及保障国家安全和社会秩序稳定而实施的一项关键性政策。......
  • 暗网网站搭建教程
    以下以云服务器的ubuntu24.04操作系统为例:(1)更新操作系统:sudo -iapt-getupdateapt-getupgrade(2)安装LAMP服务器aptinstall lamp-server^ (3)在MySQL数据库服务器上配置一个新的数据库和用户登录到MySQL数据库服务器mysql-uroot-p创建一个名为wordpress的......
  • AntFlow系列教程二之流程同意
    流程的同意即审批人点了同意按钮。没有节点上审批人的同意操作,整个流程就无法进行下去。请求接口POST{{serverurl}}/bpmnConf/process/buttonsOperation?formCode=DSFZH_WMA请求参数参数名参数类型是否必填写描述taskIdString是taskId是流程审批的核心参数,流程实例运行......
  • CMake入门
    CMake应用:基础篇什么是CMake?CMake是一个开源、跨平台的编译、测试和打包工具,它使用比较简单的语言描述编译、安装的过程,输出Makefile或者project文件,再去执行构建。在使用IDE开发软件的过程中,代码的编译和构建一般是使用IDE自带的编译工具和环境进行编译,开发者参与的并不算......
  • 如何使用ChatGPT帮你写论文?有思路有教程【小白上手指南】
    停留5分钟看完这篇文章,绝对让你写论文如虎添翼我这里先给你提供一下思路,再进行详细说明一、框架1、设定ChatGPT的背景你把主题和开题报告以及要求发给它,并告知是什么学位等等,此处建议你做一个专门的助手2、列出大纲要求它列出写作大纲,你根据它写的大纲看是否要进行调整,如......
  • ReVancedPacker 项目安装与使用教程
    ReVancedPacker项目安装与使用教程引言ReVancedPacker是一个开源项目,旨在帮助用户轻松地定制和修改Android应用程序。通过ReVancedPacker,用户可以对流行的应用程序(如YouTube、Twitter等)进行定制,添加或删除功能,甚至修改应用的外观和行为。本教程将详细介绍如何安装和使用ReV......
  • CINEMA 4D R2024(C4D)下载安装教程
    Cinema4D2024是一款强大的三维软件。CINEMA4DR2024(C4D)下载安装教程其在多方面有显著升级。模拟系统方面,刚体模拟加入统一模拟框架,可与布料、绳索等模拟类型交互;Pyro模拟功能增强,能从粒子等生成火焰且可设置初始状态、缓存及升级。建模工具上,新增图案选择功能、投影变形器......
  • ArcGIS配色带分享、安装教程
    论文中图片的美观与否,直接反映了论文水平的高低,而成图中的配色更是其中重要的一环。在我们用ArcMap进行遥感影像拉伸配色出图时,常常找寻不到合适的色带方案​。而在参考别人论文里的配色时,却发现自己电脑中ArcMap找不到相对应的颜色,最后导致图片中色彩搭配一言难尽。今天分享一......