服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - CMake语法及CMakeList.txt简单使用小结

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

2022-11-24 11:24ufgnix0802 C/C++

Cmake主要用于开发跨平台的C++项目,本文主要介绍了CMake语法及CMakeList.txt简单使用小结,具有一定的参考价值,感兴趣的可以了解一下

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进行介绍。

 

创建项目

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

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

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

创建完成

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

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

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

用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无需修改。

CMake语法及CMakeList.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简单使用小结

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

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

原文链接:https://blog.csdn.net/qq135595696/article/details/124052273

延伸 · 阅读

精彩推荐
  • C/C++C语言实现停车场项目

    C语言实现停车场项目

    这篇文章主要为大家详细介绍了C语言实现停车场项目,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    淹不死的狐狸11162022-10-20
  • C/C++树形结构的3中搜索方式示例分享

    树形结构的3中搜索方式示例分享

    树的3中常见搜索方式,包括二叉树方式(每一层只有0和1)、满m叉树(每一层都有0 到m - 1)、子集树,也称为全排列树,需要的朋友可以参考下...

    C语言程序设计6382021-01-16
  • C/C++C++函数重载介绍与原理详解

    C++函数重载介绍与原理详解

    这篇文章主要为大家介绍了C++函数重载介绍与原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助...

    Enjoy solitude-9242022-08-16
  • C/C++C++11/14 线程中使用Lambda函数的方法

    C++11/14 线程中使用Lambda函数的方法

    这篇文章主要介绍了C++11/14 线程中使用Lambda函数的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    lesliefish10282021-07-19
  • C/C++C++中opencv4.1.0环境配置的详细过程

    C++中opencv4.1.0环境配置的详细过程

    这篇文章主要介绍了C++中opencv4.1.0环境配置的详细过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需...

    孤独的猫7712022-01-21
  • C/C++深入解析C++中的引用类型

    深入解析C++中的引用类型

    引用指的是对一个对象的引用。那么什么是对象?在c++中狭义的对象指的是用类,结构,联合等复杂数据类型来声明的变量,如 MyClass myclass,CDialog mydlg,...

    C++教程网3462020-12-24
  • C/C++使用c++实现OpenCV绘制圆端矩形

    使用c++实现OpenCV绘制圆端矩形

    这篇文章主要介绍了使用c++实现OpenCV绘制圆端矩形,其中着重的讲解了OpenCV使用过程中需要注意的一些小细节,避免浪费大家在开发过程中浪费多余的时间...

    翟天保Steven7212021-12-24
  • C/C++C++函数重载详解及实例代码

    C++函数重载详解及实例代码

    这篇文章主要介绍了C++函数重载详解及实例代码的相关资料,需要的朋友可以参考下...

    C++教程网8112021-04-18