设为首页 加入收藏

TOP

CMake——01基本使用(一)
2023-07-23 13:36:55 】 浏览:96
Tags:CMake

1、cmake

cmake是用于构建、测试和软件打包的跨平台工具

2、优势

  1. 避免硬编码路径
  2. 可在多台计算机上构建一个包
  3. 可做持续集成
  4. 支持不同操作系统
  5. 支持多个编译器
  6. 可使用IDE
  7. 使用库
  8. 描述程序的逻辑结构
  9. 单元测试

3、持续集成

自动化(提交、发布、自动化测试),准确发现集成错误

4、cmake工作原理

image-20230206095728442

5、cmake安装

https://blog.csdn.net/u011231598/article/details/80338941

6、构建和运行

创建src源码文件和build编译文件

image-20230206102032253

进入build目录下,指定版本编译src

cmake -G "MinGW Makefiles" ..\src

不指定版本默认为vs

cmake ..\src

构建:在当前目录下

cmake --build .

image-20230206103356852

7、说明

  • cmake命令不区分大小写,但是变量和参数区分
  • 参数用空格或者分号隔开
  • 使用${VAR}引用变量
  • 引号可加可不加,如果有字符串就必须加

8、概念

  • 目标文件(target):可执行文件(add_eexecutable)、库文件(add_library)
  • 命令(cmake-command):下面要讲的函数
  • 变量(cmake-variable):以CMake_开头
  • 属性(cmake-properties):文件/文件夹都有各自的属性

9、命令

https://cmake.org/cmake/help/latest/

https://cmake.org/cmake/help/latest/manual/cmake-commands.7.html

9.1 project

设置项目名

project(<PROJECT-NAME> [<language-name>...])
project(<PROJECT-NAME>
		[VERSION <major>[.<minor>[].<patch>[.<tweak>]]])
		[LANGUAGES <language-name>...]
		
		
# 项目名会被存储在变量 PROJECT_NAME 和 CMAKE_PROJECT_NAME中
# PROJECT_SOURCE_DIR 等价于 <project-name>_SOURCE_DIR
# 可使用message函数输出
message(${PROJECT_NAME})
message(${PROJECT_SOURCE_DIR})
message(${demo_SOURCE_DIR})

image-20230206104853988

image-20230206105023098

9.2 add_executable

add_executable(<name> [WIN32] [MACOSX_BUNDLE]
               [EXCLUDE_FROM_ALL]
               [source1] [source2 ...])
# <name>为可执行文件的名字,与项目名称无关
# win会生成<name>.exe文件

# 如:
add_executable(demo main.cpp)

9.3 message

message([<mode>] "message text" ...)
# 如:
message(STATUS "${PROJECT_VERSION_MAJOR}")

9.4 set

设置变量

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

# 如:
set(a 1)

设置c++标准

set(CMAKE_CXX_STANDARD 11)

设置输出目录

# 设置exe文件出书目录
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

# 设置存档目标文件的输出目录
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)

image-20230206110055402

9.5 option

定义一个开关

option(<variable> "<help_text>" [value])

# value的值为ON 或者 OFF,默认为OFF
# 如:
option(VERSION_ENABLE "output version" ON)

9.6 configure_file

将输入文件进行替换并生成输出文件

configure_file(<input> <output>
               [NO_SOURCE_PERMISSIONS | USE_SOURCE_PERMISSIONS |
                FILE_PERMISSIONS <permissions>...]
               [COPYONLY] [ESCAPE_QUOTES] [@ONLY]
               [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])

# 输入文件中的 @VAR@ 或 ${VAR} 的字符串会被替换成这些变量的当前值,未定义则是空字符串

config.h.in

#define PROJECT_VERSION_MAJOR @PROJECT_VERSION_MAJOR@
#define PROJECT_VERSION_MINOR @PROJECT_VERSION_MINOR@

编译后

config.h

#define PROJECT_VERSION_MAJOR 1
#define PROJECT_VERSION_MINOR 0
#cmakedefine VAR
// 会被替换成一下两者之一,取决于VAR是否被设置
#define VAR
#undef VAR

image-20230206150448125

image-20230206150402269

9.7 include_directories

将给定的目录添加到编译器用于搜索包含文件的目录中。

include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])

# 目录会被添加到当前文件的 INCLUDE_DIRECTORIES 属性中
# 当前文件的每一个目标文件的INCLUDE_DIRECTORIES 属性也会添加该目录

9.8 target_include_directories

将包含目录添加到目标。

target_include_directories(<target> [SYSTEM] [AFTER|BEFORE]
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])

# 目标文件有 INCLUDE_DIRECTORIES 和 INTERFACE_INCLUDE_DIRECTORIES 两个属性
# INCLUDE_DIRECTORIES 对内头文件目录
# INTERFACE_INCLUDE_DIRECTORIES 对外头文件目录

# 包含src目录到目标
target_include_directories(demo PUBLIC "${PROJECT_BINARY_
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Qt 学习笔记 - 第二章 - 添加图片.. 下一篇C++笔记--数组、函数、预处理

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目