IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> CMake基础知识学习 -> 正文阅读

[开发工具]CMake基础知识学习

本文主要参考CMake官方教程


概述

  1. CMake是一个MakeFile生成器,由源代码生成各种MakeFile后,交给Make工具去编译;
  2. Windows上也可以生成VS工程,然后采用VS进行编译;
  3. CMake被用于C/C++较多,但也能用于别的编程语言;

典型用法

# 指定cmake最小版本,考虑 本项目/子项目/链接库等 对cmake版本的要求
# 有的语句是从特定版本才开始支持的
cmake_minimum_required( VERSION 3.10 )

# 声明一个工程
project(MyProject)

# 添加一个可执行文件,源文件由main.cpp组成,也可后面再添加需要的内容
add_executable(main main.cpp)

# 添加一个库文件
add_library(mylib mylib.cpp)

# 添加包含目录,位置在CMakeLists.txt所在目录下的include/文件夹
target_link_directories(main PUBLIC include/)

# 将库文件链接到可执行文件
target_link_libraries(main mylib)

变量

CMake中的变量可在IF语句中直接调用,也可以在其它位置采用${VAR_NAME}的方式调用。

可以使用set(VAR_NAME value)来设置变量的值,不用声明。

CMake中有很多内置变量,常用的有:

  1. PROJECT_SOURCE_DIRCMakeLists.txt所在目录
  2. PROJECT_BINARY_DIR:调用cmake指令的目录,如创建build文件夹后,在build文件夹中打开终端后cmake ..,该变量的值就指向build目录
  3. 判断平台:UNIX WIN32
  4. 判断编译器:MSVC MINGW,还可以MSVC_VERSION获取MSVC版本;
  5. CMAKE_RUNTIME_OUTPUT_DIRECTORY,可简单理解为exe文件的输出目录
    在这里插入图片描述
  6. CMAKE_LIBRARY_OUTPUT_DIRECTORY:可简单理解为共享库dll或so文件的输出目录
    在这里插入图片描述
  7. CMAKE_ARCHIVE_OUTPUT_DIRECTORY:可简单理解为静态库lib或a文件的输出目录
    在这里插入图片描述

    以上3个变量还可以添加后缀,指定_DEBUG_RELEASE时的输出目录,不指定时将在设置的目录下在添加Debug/Release目录:

    # debug模式下输出到对应目录,没有后缀时,将生成Debug/Release文件夹
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ./bin) 
    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ./lib)
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ./dll)
    

    有3个类似的变量RUNTIME_OUTPUT_DIRECTORY、LIBRARY_OUTPUT_DIRECTORY、ARCHIVE_OUTPUT_DIRECTORY,但笔者在设置了之后,输出文件并没有生成在对应目录下。

    这3个变量是由上述3个CMAKE_开头变量对应初始化的。

更多信息请参考CMake Variables

常用函数

  1. project():设置项目名称,将其存储到PROJECT_NAME变量中,在最顶层的CMakeLlists.txt中调用时,也会将名称存储到CMAKE_PROJECT_NAME中;

  2. configure_file(<input> <output>):将<input>中的内容全部复制到<output>中,并替换其中的@var@${var}变量,可以实现CMakeLists.txt中的变量带入程序中的效果,比如:在CMakeLists.txt中定义了程序版本,可以在程序中获取版本值;

  3. add_subdirectory( <dir> [bin_dir] [EXCLUDE_FORM_ALL] ):为项目添加一个子目录,<dir>指定子目录位置,[bin_dir]指定生成目录,可以相对路径或是绝对路径,最后一个参数表明该子目录下的内容需要显式地编译或自行编译(一般用于示例代码等);

  4. option():添加CMake调用时的选项,如option( USE_MYMATH "use my math lib" ON),然后可以这样调用:cmake -DUSE_MYMATH=OFF .;而且,可以在configure_file<input>中这样定义变量:#cmakedefine USE_MYMATH,当选项为ON时,该宏才会被定义到<output>中,然后在程序中使用#ifdef USE_MYMATH

    option()要在configure_file()之前调用,因为后者要读取前者结果;

  5. target_include_directories():添加编译给定目标时的包含目录,比如添加源码目录下的include文件夹

    target_include_directories( main PUBLIC ${PROJECT_SOURCE_DIR}/include)
    
  6. install():将编译生成目标和一些文件等,安装到指定目录,常用形式:

    install( TARGETS mylib DESTINATION lib)
    install( FILES mylib.h DESTINATION include)

常用功能

  1. 使用C++11

    # specify the C++ standard
    set(CMAKE_CXX_STANDARD 11)
    set(CMAKE_CXX_STANDARD_REQUIRED True)
    
  2. 指定MSVC编译器:

    cmake -G "Visual Studio 14 2015" -A Win32 .
    cmake -G "Visual Studio 14 2015" -A x64 .
    cmake -G "Visual Studio 14 2015" -A ARM .
    
  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-02-22 20:48:28  更:2022-02-22 20:49:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:42:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码