linux下CMake的简单介绍

一、CMake简介

  CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件。
特点:使用简单方便,可以跨平台使用,构建项目编译环境。比直接写Makefile文件简单,可以通过简单的CMake生成复杂的Makefile文件。
关于跨平台
Let’s assume you have some cross-platform project with C++ code shared along different platforms/IDE.Say you use visual studio on Windows,xcode on Mac and Makefile for Linux:
在这里插入图片描述
如果这时候我们工程中增加了一个bar.cpp文件,我们要对Makefile等三个文件进行修改,这就比较麻烦。
在这里插入图片描述
所以当我们使用CMake的时候,我们要先写一个CMake的配置文件CMakeLists.txt,执行cmake .之后在不同的平台就会自动的生成不同的工程文件,在Linux平台生成Makefile文件。这就减少了我们的工作量。
在这里插入图片描述
这时候如果我们添加了一个bar.cpp文件,只需要修改CMakeLists.txt就可以了。在这里插入图片描述

二、CMake的安装

Ubuntu上直接执行sudo apt install cmake,通过cmake -version查看版本。

jqw@jqw-virtual-machine:~/my_code/test6_10$ cmake -version
cmake version 3.16.3

CMake suite maintained and supported by Kitware (kitware.com/cmake).

三、CMake的语法特性的介绍

基本语法格式

    指令(参数1 参数2…)

  • 参数之间用空格或者分号隔开(不要使用逗号)

  • 指令不区分大小写,参数变量是区分大小写的

  • 变量使用${}方式取值,但是在 IF 控制语句中是直接使用变量名
    在这里插入图片描述

CMake常用的指令和变量

1. 常用的指令

[ ] 代表可选项

(1)cmake_minimum_required :指定CMake的最小版本要求

  • 语法:cmake_minimum_required(VERSION versionNumber [FATAL_ERROR])
# CMake最小版本要求为2.8.3
cmake_minimum_required(VERSION 2.8.3)

(2)project :自定义工程名称,并可以指定工程支持的语言

  • 语法:project(projectname [CXX] [C] [Java])
#  CMake指定工程名为HELLOWORLD
project(HELLOWORLD)

(3)set : 显式的定义变量

  • 语法:set(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
# Cmake - 定义SRC变量,其值为max.cpp sum.cpp
set(SRC max.cpp sum.cpp)

(4)add_executable:生成可执行文件

  • 语法:add_executable (exename source1 source2 … source n)
# c 编译main.cpp,sum.c max.c生成可执行文件main
add_executable(main main.c sum.c max.c)
# same : g++ -o main main.c sum.c max.c

(5)include_directories: 向工程添加多个特定的头文件搜索路径 ,相当于指定g++编译器的-I参数,也相当于我们配置VScode时的includepath。

  • 语法:include_directories([AFTER|BEFORE] [SYSTEM] dir1 dir2 …)
# 将/usr/include/myincludefolder 和 ./include 添加到头文件搜索路径
include_directories(/usr/include/myincludefolder ./include)

(6)link_directories:向工程添加多个特定的库文件搜索路径 —>相当于指定g++编译器的-L参数。

  • 语法:link_directories(dir1 dir2 …)
# 将/usr/lib/mylibfolder 和 ./lib 添加到库文件搜索路径
link_directories(/usr/lib/mylibfolder ./lib)

(7)add_library: 生成库文件

  • 语法:add_library(libname [SHARED|STATIC|MODULE] [EXCLUDE_FROM_ALL] source1 source2 … sourceN)
# 通过变量 SRC 生成 libhello.so 共享库
add_library(hello SHARED ${SRC})

(8)add_compile_options :添加编译参数

# 添加编译参数 -Wall -std=c++11
add_compile_options(-Wall -std=c++11 -O2)

(9)target_link_libraries: 为 target 添加需要链接的共享库 —>相同于指定g++编译器-l参数

  • 语法:target_link_libraries(target library1library2…)
# 将hello动态库文件链接到可执行文件main
target_link_libraries(main hello)

(10)aux_source_directory : 发现一个目录下所有的源代码文件并将列表存储在一个变量中,这个指令临时被用来自动构建源文件列表

  • 语法:aux_source_directory(dir VARIABLE)
# 定义SRC变量,其值为当前目录下所有的源代码文件
aux_source_directory(. SRC)
# 编译SRC变量所代表的源代码文件,生成main可执行文件
add_executable(main ${SRC})

(11)add_subdirectory: 向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置

  • 语法:add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
# 添加src子目录,src中需有一个CMakeLists.txt
add_subdirectory(src)

2.常用的变量

PROJECT_NAME : 通过 project() 指定项目名称
PROJECT_SOURCE_DIR: 工程的根目录
PROJECT_BINARY_DIR : 执行 cmake 命令的目录
CMAKE_CURRENT_SOURCE_DIR: 当前CMakeList.txt 文件所在的目录
CMAKE_CURRENT_BINARY_DIR : 编译目录,可使用 add subdirectory 来修改
EXECUTABLE_OUTPUT_PATH : 二进制可执行文件输出位置
LIBRARY_OUTPUT_PATH : 库文件输出位置
BUILD_SHARED_LIBS: 默认的库编译方式 ( shared 或 static ) ,默认为 static
CMAKE_C_FLAGS : 设置 C 编译选项
CMAKE_CXX_FLAGS : 设置 C++ 编译选项
CMAKE_CXX_FLAGS_DEBUG: 设置编译类型 Debug 时的编译选项
CMAKE_CXX_FLAGS_RELEASE: 设置编译类型 Release 时的编译选项
CMAKE_GENERATOR : 编译器名称
CMAKE_COMMAND : CMake 可执行文件本身的全路径
CMAKE_BUILD_TYPE : 工程编译生成的版本, Debug / Release

四、CMake编译工程

1.目录结构

项目主目录(顶层目录)要包含一个CMakeLists.txt文件。
有两种方式设置编译规则:
(1)包含源文件的子目录中包含CMakeLists.txt,主目录的CMakeLists.txt通过add_subdirectory指令添加子目录即可。
(2)包含源文件的子目录并没有CMakeLists.txt,子目录编译规则体现在主目录的CMakeLists.txt中。

2. 编译流程

在linux底下的编译流程如下:

  1. 编写CmakeLists.txt
  2. 执行cmake PATH 生成Makefile(PATH是顶层CMakeLists.txt所在的目录)
  3. 执行make命令

3. 两种构建方式

  1. 内部构建
    直接执行cmake . 在当前目录编译本目录的CMakeLists.txt,会生成大量的中间文件,和工程文件放在一块会显得杂乱无章。
  2. 外部构建(简洁)
    将编译产生的中间文件和源文件放到不同的目录中
    在这里插入图片描述
    外部构建:
    在这里插入图片描述
    在这里插入图片描述

五、一个简单工程的构建

1.目录结构

分别创建bin目录,build目录,include目录,src目录。

在这里插入图片描述

2.CMakeLists.txt

在这里插入图片描述

3.过程

使用外部构建的方式,进入build目录执行cmake … ,生成中间文件(Makefile文件等),然后执行make命令,生成可执行文件(bin目录下)。
在这里插入图片描述
在这里插入图片描述
可以看到已经生成了可执行文件和Makefile文件
在这里插入图片描述
执行结果:
在这里插入图片描述

六、静态库和动态库的编译控制

把上面的max和swap源文件直接生成静态库或者动态库,让外部程序直接进行链接使用,代码结构如下:
在这里插入图片描述
最外层的CMakeLists.txt是总控制的编译文件,内容如下:
在这里插入图片描述
src中的CMakeLists.txt是生成库文件的,内容如下:
在这里插入图片描述
test中的CMakeLists.txt是负责生成可执行文件并进行链接的,内容如下:
在这里插入图片描述
执行完cmake 和make命令后:
在这里插入图片描述

  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: CMake是一种跨平台的自动化构建工具,它可以帮助程序员在不同的操作系统和编译器上构建和测试软件项目。以下是一个简明的CMake教程: 1. 首先,安装CMake。在Linux系统上,可以使用包管理器进行安装。例如,在Ubuntu系统上,可以使用以下命令安装CMake: ``` sudo apt-get install cmake ``` 2. 创建一个新的工作目录,并进入该目录。假设该目录的名称为“my_project”。 ``` mkdir my_project cd my_project ``` 3. 在工作目录创建一个CMakeLists.txt文件,并将以下内容添加到文件: ``` cmake_minimum_required(VERSION 3.5) project(my_project) add_executable(my_executable main.cpp) ``` 4. 在工作目录创建一个源代码文件main.cpp,该文件将包含应用程序的主要功能。 5. 执行以下命令生成Makefile并编译程序: ``` cmake . make ``` 6. 编译完成后,运行可执行文件: ``` ./my_executable ``` 这是一个非常简单CMake教程,仅仅介绍了如何使用CMake构建一个简单的应用程序。对于更复杂的项目,可能需要更详细的CMake配置。 ### 回答2: CMake是一种跨平台的编译程序,它可以自动生成Makefile和Visual Studio工程文件,支持Windows、Mac OS X和Linux等操作系统。本文将简要介绍Linux下使用CMake的方法。 1. 安装CMakeLinux下,你可以通过包管理器来安装CMake。 在Debian/Ubuntu系统安装CMake sudo apt-get install cmake 在Fedora系统安装CMake sudo dnf install cmake 在CentOS系统安装CMake sudo yum install cmake 在Arch Linux系统安装cmake sudo pacman -S cmake 2. 编写CMakeLists.txt文件 CMakeLists.txt是CMake的配置文件,用于指示CMake如何构建项目。 在你的项目根目录下创建CMakeLists.txt文件。 下面是一个示例CMakeLists.txt文件: cmake_minimum_required(VERSION 2.8) project(myproject) set(CMAKE_CXX_STANDARD 11) add_executable(myapp main.cpp) 3. 构建项目 在终端,使用cd命令进入到你的项目目录,然后创建build目录,在build目录下执行cmake命令。 mkdir build cd build cmake .. 执行完cmake命令后,CMake会根据你的CMakeLists.txt文件生成一些Makefile或Visual Studio工程文件。 在Linux系统,你可以使用make工具来构建项目: make 4. 运行项目 在终端,进入到build目录下,执行生成的可执行文件即可: cd build ./myapp 这就是在Linux下使用CMake简单教程。CMake可以帮助你轻松地构建项目,同时还支持多种操作系统和编译器平台,是一款非常方便的编译器工具。 ### 回答3: CMake是一个跨平台的自动化构建系统,提供了一种类似Makefile的配置文件,可以生成针对各种编译器的本地化makefile和其它构建系统文件。它能够简化开发和构建过程,使用户可以在多种不同的平台、编译器和操作系统上实现跨平台的构建。 CMake是在Linux使用的非常流行的构建系统,下面是CMake的简明教程: 1.安装CMake 使用以下命令安装CMake: sudo apt-get install cmake 2.建立项目目录 在自己的工作目录下新建一个子目录,并进入该目录。 3.创建CMakeLists.txt文件 在该目录下创建一个名为CMakeLists.txt的文件,这是CMake的核心文件,它定义了项目的编译、构建过程和依赖关系等。 4.添加源文件 在CMakeLists.txt文件添加源文件。源文件是指程序的源代码文件,包括头文件和源文件。 5.指定可执行文件名称 在CMakeLists.txt文件指定可执行文件的名称,使用add_executable命令即可。例如: add_executable(test test.c) 6.添加库文件和依赖库 在CMakeLists.txt文件添加需要的库文件及其依赖库,使用target_link_libraries命令即可。例如: target_link_libraries(test pthread) 7.编译项目 在项目目录下执行以下命令: mkdir build cd build cmake .. make 8.运行程序 在build目录下可以找到可执行文件,使用以下命令运行程序: ./test 总结:上述为一个简单CMake教程,可以帮助开发者理解如何使用CMake管理项目,并且可以通过这个教程的基础上更加深入的学习CMake,在将来的开发更加灵活、高效的使用CMake来构建项目。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值