cmak使用

1.cmake简介及安装

CMake简介

CMake是一个用于管理源代码的跨平台构建工具,可以方便地根据目标平台和编译工具产生对应的编译文件,如基于Linux系统生成对应的Makefile文件或Widows Virtual Studio生成project等。虽然最主要用于C/C++语言的构建,但是也可以用于其它编程语言的源代码。

如同使用make命令工具解析Makefile文件一样,cmake命令工具依赖于一个CMakeLists.txt的文件,该文件定义了代码的编译规则和目标等信息。

在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下:

编写 CMake 配置文件 CMakeLists.txt 。

执行命令 cmake PATH 或者 ccmake PATH 生成 Makefile 。其中, PATH 是 CMakeLists.txt 所在的目录。

使用 make 命令进行编译。

安装CMake

下面以Ubuntu 16.04安装cmake为例。

使用命令在线安装

sudo apt-get install cmake

这种方式需要联网且安装的是链接库中的版本,可能不是最新或指定的cmake版本。

如果能联网且希望安装指定版本可以使用如下简单方法:

从官网上下载对应版本的.sh文件,如:cmake-3.17.2-Linux-x86_64.sh

运行该文件:

./cmake-3.17.2-Linux-x86_64.sh

根据提示输入对应命令即可完成安装。

使用源代码编译安装

  1. 下载源代码

从官网:https://cmake.org/download中下载适合的版本。

我这里下载的3.17.2版本

  1. 编译

#解压

tar xvf cmake-3.17.2.tar.gz
cd cmake-3.17.2
./boostrap
make -j32
  1. 安装
sudo make install
  1. 确认是否安装成功
cmake --version

注:不同平台可能会遇到依赖问题,相应解决即可。

2.编译可执行文件的简单sample

示例

编写测试源程序

#include <iostream>

using namespace std;

int main()
{
​    cout << "This is a cmake sample" << endl;

​    return 0;
}

编写CMakeLists.txt

#cmake最低版本要求
cmake_minimum_required (VERSION 3.5)

#项目信息
project (cmake_test)

#指定生成目标
add_executable (hello hello.cpp)

编写CMakeLists.txt文件,并保存在与main.cpp源文件同个目录下:

CMakeLists.txt 的语法比较简单,由命令、注释和空格组成,其中命令是不区分大小写的。符号 # 后面的内容被认为是注释。命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔。

此时文件夹目录下有如下两个文件:CMakeLists.txt hello.cpp

编译

执行cmake .

@server:~/test/cmaketest$ cmake .

-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/gupan/test/cmaketest

此时文件夹下面多了3个文件,分别是CMakeCache.txt,cmake_install.camke,Makefile。

和1个文件夹/CMakeFiles,里面有很多cmake相关的文件。Makefile就是cmake自动产生的下一步编译所需的编译规则文件。

执行make

使用 make 命令编译得可执行文件。
@server:~/test/cmaketest$ make

Scanning dependencies of target hello
[ 50%] Building CXX object CMakeFiles/hello.dir/hello.cpp.o
[100%] Linking CXX executable hello
[100%] Built target hello

此时文件夹下又多了一个可执行文件’hello’。

运行

@server:~/test/cmaketest$ ./hello

This is a cmake sample

命令解析

cmake_minimum_required

cmake_minimum_required是cmake的一个command,其设置项目的最低的cmake版本要求。如果实际环境的cmake版本小于该命令的设置,则报错。

这个命令通常是必要的,且在CMakeLists.txt文件的一开始就使用。(如果有多层目录,那么子目录下的文件可以不要)

用法如下:

cmake_minimum_required(VERSION <min>[...<max>] [FATAL_ERROR])

VERSION:关键字,必需且保持不变;
min : 指定的cmake最低版本,实际运行环境的cmake必须不小于这个版本,通常说明编译文件使用到了哪个版本的特性。
max : 可选,用于指定最高的cmake版本,如果设置,则必须不小于min且可能会影响cmake_policy的设置,此选项在3.12版本后才添加

min, max均遵循cmake的版本格式:major.minor[.patch[.tweak]]

FATAL_ERROR : 可选,在cmake2.6之后就不再使用,保留它仅仅为了兼容低版本的命令。

project

project命令设置项目的名称,并将其保存在变量PROJECT_NAME中。如果是顶层CMakeLists.txt,还将项目名称存储在变量CMAKE_PROJECT_NAME中。

后面就可以直接用{PROJECT_NAME}或{CMAKE_PROJECT_NAME}命令来获取项目名称。

这个命令在一个项目的CMakeLists.txt中也是必要的。

用法:

project(<PROJECT-NAME> [<language-name>...])
project(<PROJECT-NAME>
​    [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
​    [DESCRIPTION <project-description-string>]
​    [HOMEPAGE_URL <url-string>]
​    [LANGUAGES <language-name>...])

PROJECT-NAME:项目名称

VERSION:如同软件版本号,说明项目版本,可选。如果使用,CMP0048必须设置为NEW,同时版本号会保存在以下变量中:

PROJECT_VERSION, PROJECT-NAME_VERSION
PROJECT_VERSION_MAJOR, PROJECT-NAME_VERSION_MAJOR
PROJECT_VERSION_MINOR, PROJECT-NAME_VERSION_MINOR
PROJECT_VERSION_PATCH, PROJECT-NAME_VERSION_PATCH
PROJECT_VERSION_TWEAK, PROJECT-NAME_VERSION_TWEAK
CMAKE_PROJECT_VERSION(仅在顶层有效)

DESCRIPTION:项目描述,通常比较短的字符串,不超过几个单词,可选。内容会保存在以下变量中:

PROJECT_DESCRIPTION, PROJECT-NAME_DESCRIPTION
CMAKE_PROJECT_DESCRIPTION (仅在顶层有效)

HOMEPAGE_URL:指定项目的URL主页,可选。保存在以下变量中:

PROJECT_HOMEPAGE_URL, PROJECT-NAME_HOMEPAGE_URL
CMAKE_PROJECT_HOMEPAGE_URL (仅在顶层有效)

LANGUAGES:选择构建项目所需的编程语言,可选。支持的语言包括C,CXX(即C ++),CUDA,OBJC(即Objective-C),OBJCXX,Fortran和ASM。如果未指定,则默认使用C和CXX。

add_executable

指定可执行文件名称和使用的源文件。

通常生成的可执行文件必须是全局唯一的,可以只是文件的逻辑名(如:test),也可以带有后缀(如:test.exe)。建议直接使用逻辑名,由cmake根据平台来自动补全,这样会提高代码的跨平台性能。

用法(1):

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

name:可执行文件名称
WIN32:目标平台属性,如果声明,则可执行文件是运行在32bits Windows平台的
MACOSX_BUNDLE:目标平台属性
EXCLUDE_FROM_ALL:目标平台属性
source1…:源文件名称(如果在其他目录下需指定路径)

用法(2):

add_executable(<name> IMPORTED [GLOBAL])

可行性文件引用了外部的可执行文件,不是很常用。(至少目前为止我没用过,且没见过哪个项目用过。)

用法(3):

add_executable(<name> ALIAS <ta
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值