iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >CMake语法及CMakeList.txt简单使用小结
  • 458
分享到

CMake语法及CMakeList.txt简单使用小结

2024-04-02 19:04:59 458人浏览 安东尼
摘要

目录CMake简单介绍创建项目CMake语法常用的命令常用的变量简单使用实例CMake简单介绍 Cmake主要用于开发跨平台的c++项目,对于windows程序员来说,在linux上

CMake简单介绍

Cmake主要用于开发跨平台的c++项目,对于windows程序员来说,在linux上开发C++程序会非常困难,一来没用过makefile,其语法非常生疏难懂,二来visual studio编译器实在优点太多(目前最新推出的vs2022中开启效率得到了质的提升,而且内置的IntelliCode更是直呼内行)。这就导致C++不同于其他语言,硬生生催生出Windows程序员和Linux程序员两个群体,直到出现CMake这个局面才被打破。

CMake可以在Linux上自动生成makefile,在Windows下可以生成vs解决方案sln,对于大规模跨平台项目绝对是首选。相比于makefile,CMake语法要简单的多。自vs2017之后vs便支持CMake语法,到目前vs2022仍然支持,其效果之不必多说。

TIPS:以下均使用vs2022进行介绍。

创建项目

效果图

效果图

TIPS:解决方案就是项目的合集,项目是对应每一个静态库,动态库和可执行文件的编译目标。

创建完成

效果图

TIPS:建议红色框框里面的内容一定要看一遍。

效果图

用CMake构建一个项目工程,是通过一个或多个CMakeLists.txt文件来控制的。CMakeLists.txt中包含一系列命令来描述需要执行的构建。

CMake语法

在CMakeLists.txt中的命令的语法,都是形如下面这种格式:

command (args ...)
  • command:命令的名字
  • args:参数列表。多个参数使用空格隔开。

常用的命令

cmake_minimum_required

设置项目要求的CMake最低版本号,如果当前版本的CMake低于所需的值,它将停止处理项目并报告错误。注意务必在project之前调用该命令,一般是在CMakeLists.txt文件开头调用。命令格式为:

cmake_minimum_required(VERSION major.minor[.patch[.tweak]] [FATAL_ERROR])

使用示例:

cmake_minimum_required(VERSION 2.8.5)
cmake_minimum_required(VERSION 3.8)

add_executable

使用指定的源文件给项目添加一个可执行文件。命令格式为:

add_executable(<name> [WIN32] [MacOSX_BUNDLE] [EXCLUDE_FROM_ALL] source1 [source2 ...])

参数介绍:

  • name:该命令调用列出的源文件来构建的可执行目标。 对应于逻辑目标名称,在项目中必须是全局唯一的。构建的可执行文件的实际文件名是基于本机平台的约定。
  • WIN32:如果给出WIN32,则在创建的目标上设置属性WIN32_EXECUTABLE。
  • MACOSX_BUNDLE:如果给定MACOSX_BUNDLE,将在创建的目标上设置相应的属性。
  • EXCLUDE_FROM_ALL:如果给定EXCLUDE_FROM_ALL,将在创建的目标上设置相应的属性。
  • source:源码列表。

使用示例:

add_executable (CMakeClient0331 "CMakeClient0331.cpp" "CMakeClient0331.h")

project

  为整个工程设置一个工程名。命名格式为:

project (<PROJECT-NAME> [LANGUAGES] [<language-name>...])
project (<PROJECT-NAME> [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]] [LANGUAGES<language-name>...])

使用示例:

project ("CMakeClient0331")

set

将一个CMAKE变量设置为给定值。命名格式为:

set(<variable> <value>... [PARENT_SCOPE])

使用示例:

set(COCOS2D_ROOT ${CMAKE_SOURCE_DIR}/cocos2d)

常用的变量

使用${ }进行变量的引用。例如:message(${CMAKE_VERSION}),表示向用户显示cmake的完整版本号。CMake还提供了很多有用的变量。以下仅列举常用的变量:

  • CMAKE_BINARY_DIR:构建树的顶层路径
  • CMAKE_COMMAND:指向CMake可执行文件的完整路径
  • CMAKE_CURRENT_BINARY_DIR:当前正在被处理的二进制目录的路径。
  • CMAKE_CURRENT_SOURCE_DIR:指向正在被处理的源码目录的路径。
  • CMAKE_HOME_DIRECTORY:指向源码树顶层的路径。
  • CMAKE_PROJECT_NAME:当前工程的工程名。
  • CMAKE_ROOT:CMake的安装路径。
  • CMAKE_SOURCE_DIR:源码树的顶层路径。
  • CMAKE_VERSION:cmake的完整版本号。
  • PROJECT_BINARY_DIR:指向当前编译工程构建的全路径。
  • <PROJECT-NAME>_BINARY_DIR:指向当前编译工程构建的全路径。
  • <PROJECT-NAME>_SOURCE_DIR:指向构建工程的全路径。
  • PROJECT_SOURCE_DIR:指向构建工程的全路径。
  • PROJECT_NAME:project命令传递的工程名参数。
  • <PROJECT-NAME>_VERSION:项目的完整版本号。

内置宏

  • EXECUTABLE_OUTPUT_PATH :用于确定可执行文件的输出路径
  • CMAKE_ARCHive_OUTPUT_DIRECTORY:静态库lib的输出路径
  • CMAKE_DEBUG_POSTFIX:设置Debug版本下的库文件后缀名
  • CMAKE_RELEASE_POSTFIX:设置Release版本下库文件的后缀名

简单使用实例

以下项目中的CMakeLists.txt文件内容如下(应用场景为:生成客户端和服务端的可执行文件,同时指定生成可执行文件的目录),根目录的CMakeLists.txt无需修改。

效果图

# CMakeList.txt: Server0327 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
cmake_minimum_required (VERSION 3.8)

#exe程序的路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../bin)

# 将源代码添加到此项目的可执行文件。
add_executable (Server "Server0327.cpp" "Server0327.h")

add_executable (Client "CMakeClient0331.cpp" "CMakeClient0331.h")

# TODO: 如有需要,请添加测试并安装目标。

运行效果展示

效果图

效果图

效果图

到此这篇关于CMake语法及CMakeList.txt简单使用小结的文章就介绍到这了,更多相关CMake语法及CMakeList.txt使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: CMake语法及CMakeList.txt简单使用小结

本文链接: https://www.lsjlt.com/news/148142.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • CMake语法及CMakeList.txt简单使用小结
    目录CMake简单介绍创建项目CMake语法常用的命令常用的变量简单使用实例CMake简单介绍 Cmake主要用于开发跨平台的C++项目,对于Windows程序员来说,在Linux上...
    99+
    2024-04-02
  • redis简单介绍及安装使用小结
    一:redis介绍 Redis和Memcached类似,也属于k-v数据存储 Redis官网redis.io, 当前最新稳定版4.0.1 支持更多value类型,除了和string外,还支持hash、li...
    99+
    2024-04-02
  • Android Toast使用的简单小结(推荐)
    老规矩,先上效果图吧 主要实现了几种常用的方式: 1.最基本的Toast 系统自带Toast采用的是队列的方式, 等当前Toast消失后, 下一个Toast才能显示出来;原因是To...
    99+
    2024-04-02
  • Angular环境搭建及简单体验小结
    Angular介绍 Angular是谷歌开发的一款开源的web前端框架,诞生于2009年,由Misko Hevery 等人创建,后为Google所收购。是一款优秀的前端JS框架,已...
    99+
    2024-04-02
  • Java链表数据结构及其简单使用方法解析
    目录认识链表结构单向链表双向链表加深对链表结构的理解实现单向和双向链表的反转实现把链表中给定的值都删除小结认识链表结构 单向链表 单链表在内存中的表示: 可以看到,一个链表的节点包...
    99+
    2024-04-02
  • Pythonoptparse模块及简单使用
    目录参数说明函数说明简单使用optparse,是一个更够让程序设计人员轻松设计出简单明了、易于使用、符合标准的Unix命令例程式的Python模块,生成使用和帮助信息。 参数说明 d...
    99+
    2022-12-08
    Python optparse模块 Python optparse使用
  • 一个简单的toolabar结合drawlayout使用方法
    本文实例为大家分享了toolabar结合drawlayout使用方法,供大家参考,具体内容如下package alice.bw.com.day03toolabardrawlayout;import android.support.v7.ap...
    99+
    2023-05-30
    toolabar drawlayout
  • 怎么使用c语言编写简单小游戏
    编写一个简单的猜数字小游戏的例子:```#include #include #include int main() {int ran...
    99+
    2023-08-31
    c语言
  • java中Callback简单使用总结
    1、什么是Callback,什么时候需要使用Callbackcallback是回调的意思,一般我们需要2个类需要相互掉用,一个类把数据动态传递给另外一个类的时候,可以用这种方式,比如Android里面的Launcher类和LauncherM...
    99+
    2023-05-31
    java callback ava
  • 简单总结SpringMVC拦截器的使用方法
    SpringMVC拦截器 拦截器类似于Filter过滤器,它是springMVC特有的,它可以预处理和后处理,我们可以定义一些拦截器来实现特定的业务。 过滤器与拦截器本质区别: (1...
    99+
    2024-04-02
  • Filestream使用简单步骤总结
    目录1、开启SqlServer实例对FileStream 的开关,具体开关在 Sql Server配置管理器里面,都打开。2、打开SSMS 在实例配置 ,这样就打开了FileStre...
    99+
    2024-04-02
  • Go语言开发redis封装及简单使用详解
    目录go redis 集合操作--sadd安装redigo带密码的redis操作批量添加无密码redis操作redis封装包参考go redis 集合操作--sadd redis的g...
    99+
    2024-04-02
  • 简单介绍Python虚拟环境及使用方法
    目录一、为什么需要虚拟环境?二、virtualenv三、venv四、pipenv一、为什么需要虚拟环境? 这里的环境,指的就是 Python 代码的运行环境。它应该包含以下信息: ...
    99+
    2024-04-02
  • phpstudy2020安装及简单使用教程
    phpstudyV8.0以上使用教程 简介安装步骤配置搭建网站自己的第一个PHP程序 官网 最新版长这样 简介 按我的理解,phpstudy是一个集成式的PHP运行环境,虽然是个软件,但他实...
    99+
    2023-09-13
    服务器 php apache 工具
  • Android Kotlin的使用及简单实例
    Android Kotlin的使用及简单实例写在前面的话,作为一个不熬夜的人,一觉醒来发现Kotlin成为了Android的官方语言,可谓是大喜过望。为了趁热打铁,我决定提前三天放出原定本周日Release的文章。希望能及时让大家了解一下K...
    99+
    2023-05-31
    android kotlin roi
  • DrawerLayout的简单使用及侧滑菜单实现方法是什么
    本篇内容主要讲解“DrawerLayout的简单使用及侧滑菜单实现方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“DrawerLayout的简单使用及侧滑菜单实现方法是什么”吧!1.使用...
    99+
    2023-07-06
  • Vuejs的简单使用方法
    这篇文章主要介绍“Vuejs的简单使用方法”,在日常操作中,相信很多人在Vuejs的简单使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vuejs的简单使用方法”的疑惑...
    99+
    2024-04-02
  • C语言goto语句简单使用详解
    简单介绍 C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。但是某些场合下goto语句还是...
    99+
    2024-04-02
  • filters.revealTrans.Transition使用方法小结
    filters.revealTrans.Transition使用方法小结:1. 创建Transition对象:使用`var tran...
    99+
    2023-08-17
    使用方法
  • koa-compose简单实现及使用的方法是什么
    这篇“koa-compose简单实现及使用的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“koa-compose简...
    99+
    2023-07-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作