CMake的简单应用

请允许我来讲解“CMake的简单应用”的完整攻略。

什么是 CMake

CMake 是一个跨平台的编译构建工具,它可以用来自动生成 Makefile、Visual Studio 的项目、XCode 的工程等等编译构建相关的文件。

它可以帮助我们更方便地管理和构建跨平台的项目,提高开发效率和代码可维护性。下面我们将介绍如何使用 CMake 来构建项目。

CMake 的安装

Linux/MacOS

在 Linux 和 MacOS 下可以通过包管理器来安装 CMake,比如在 Ubuntu 上可以使用以下命令:

sudo apt-get install cmake

而在 MacOS 上可以使用 Homebrew 来安装:

brew install cmake

Windows

在 Windows 上可以通过 CMake 官网 https://cmake.org 下载对应版本并安装。

CMake 工程的创建

我们可以先在项目根目录下新建一个 CMakeLists.txt 文件,然后根据项目的需要添加相关配置信息。

比如,下面是一个简单的 CMakeLists.txt 配置文件:

cmake_minimum_required(VERSION 2.8)

project(myproject)

set(CMAKE_CXX_STANDARD 17)

add_executable(myprogram main.cpp)

其中,cmake_minimum_required(VERSION 2.8) 表示指定需要的 CMake 最低版本为 2.8。

project(myproject) 表示指定项目名称为 myproject。

set(CMAKE_CXX_STANDARD 17) 表示指定使用的 C++ 标准为 C++17。

add_executable(myprogram main.cpp) 表示将 main.cpp 文件编译成可执行文件 myprogram。

CMake 的构建过程

基本的构建

使用 CMake 构建项目的基本过程如下:

cd 项目根目录
mkdir build
cd build
cmake ..
make

其中,.. 表示使用父级目录下的 CMakeLists.txt 文件来进行构建。

参数化构建

我们可以通过参数化来指定不同的构建选项,比如:

cd 项目根目录
mkdir build-debug
cd build-debug
cmake -DCMAKE_BUILD_TYPE=Debug ..
make

这里的 -DCMAKE_BUILD_TYPE=Debug 就指定了构建选项为 Debug,可以方便我们在调试时进行单步执行、断点调试等。

在 Windows 上使用 CMake

在 Windows 上可以使用 Visual Studio 自带的命令行工具 Developer Command Prompt for VS <版本号> 来使用 CMake,比如:

rem 执行 Visual Studio 2019 的命令行工具
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"

rem 进入项目根目录
cd 项目根目录

rem 创建构建目录
mkdir build

rem 进入构建目录
cd build

rem 使用 Visual Studio 的生成工具进行构建
cmake -G "NMake Makefiles" ..
nmake

使用示例

示例 1:编译一个简单的 hello world 程序

  1. 新建一个目录,并且进入该目录:

sh
mkdir hello_world
cd hello_world

  1. 新建一个 main.cpp 文件,并且输入下面的代码:

```cpp
#include
using namespace std;

int main() {
cout << "Hello, World!" << endl;
return 0;
}
```

  1. 新建一个 CMakeLists.txt 文件,并且输入下面的代码:

```cmake
cmak_minimum_required(VERSION 2.8)

project(hello_world)

add_executable(hello_world main.cpp)
```

  1. 构建项目:

sh
mkdir build
cd build
cmake ..
make

  1. 运行程序:

sh
./hello_world

此时,输出内容应该是:Hello, World!

示例 2:编译并链接一个动态库

  1. 新建一个目录,并且进入该目录:

sh
mkdir calculate
cd calculate

  1. 新建一个 calculate.cpp 文件,并且输入下面的代码:

```cpp
extern "C" int add(int a, int b) {
return a + b;
}

extern "C" int sub(int a, int b) {
return a - b;
}
```

  1. 新建一个 CMakeLists.txt 文件,并且输入下面的代码:

```cmake
cmake_minimum_required(VERSION 2.8)

project(calculate)

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)

configure_file(calculate.h.in calculate.h)

add_library(calculate SHARED calculate.cpp)

install(TARGETS calculate
EXPORT calculate-targets
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
INCLUDES DESTINATION include)

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/calculate.h
DESTINATION include/calculate)
```

  1. 使用 cmake -DCMAKE_INSTALL_PREFIX=./install .. && make install 进行构建和安装

  2. 在其他项目中使用该动态库(假设该项目为 test),需要编写 test.cpp 文件,并且输入下面的代码:

```cpp
#include
#include "calculate.h"

using namespace std;

int main() {
int a = 1;
int b = 2;
cout << "add(" << a << ", " << b << ") = " << add(a, b) << endl;
cout << "sub(" << a << ", " << b << ") = " << sub(a, b) << endl;
return 0;
}
```

  1. 新建一个 CMakeLists.txt 文件,并且输入下面的代码:

```cmake
cmake_minimum_required(VERSION 2.8)

project(test)

set(CMAKE_CXX_STANDARD 17)

find_package(calculate REQUIRED)
include_directories(${calculate_INCLUDE_DIRS})

add_executable(test test.cpp)

target_link_libraries(test calculate)
```

  1. 使用 cmake .. && make 进行构建

  2. 运行程序:

sh
./test

此时,输出内容应该是:add(1, 2) = 3sub(1, 2) = -1

以上就是 CMake 的简单应用的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:CMake的简单应用 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • Mybatis-plus操作json字段实战教程

    下面是“Mybatis-plus操作json字段实战教程”的完整攻略: 1. 引入依赖 要操作json字段,我们需要引入fastjson依赖,以及mybatis-plus本身的依赖。在这里我们使用mybatis-plus的最新版本3.4.3: <dependency> <groupId>com.alibaba</groupId&…

    C 2023年5月23日
    00
  • 毕业答辩的ppt怎么写? 毕业答辩的ppt的制作技巧

    下面是毕业答辩PPT的制作攻略,分为以下几个步骤: 1.明确PPT的目的和主题 在制作PPT之前,我们需要先想清楚PPT的主题和目的,展示内容和要讲解的重点,对于毕业答辩PPT来说,最好能够简洁明了地介绍自己的研究方向、主要研究内容和研究成果。 2.制作PPT的结构 PPT的结构要清晰且合理,通过分章节、剖析问题、展示数据等多种方式为听众呈现自己的研究成果。…

    C 2023年5月22日
    00
  • C语言流程控制之switch语句详解

    C语言流程控制之switch语句详解是本网站总结的一篇C语言教程文章,主要介绍了switch语句的用法和注意事项。本文将通过以下几个方面详细讲解: 1. switch语句的基本格式 switch语句由一个表达式和多个case组成,如下所示: switch(expression){ case constant-expression1: statement1; …

    C 2023年5月23日
    00
  • C语言字符串声明

    C语言字符串可以理解为是由若干个字符(char)组成的数组,它以null字节为结尾。在C语言中,声明字符串变量需要特殊的语法,下面是一份讲解C语言字符串声明的完整使用攻略。 声明字符串变量 在C语言中,声明字符串变量需要使用char类型以及一对双引号(“”). 这里有几个重点需要注意: 字符串中的每一个字符都分配了存储空间。 字符串末尾会自动添加一个null…

    C 2023年5月9日
    00
  • 逍遥自在学C语言 | 条件控制的正确使用姿势

    前言 在C语言中,有三种条件判断结构:if语句、if-else语句和switch语句。 一、人物简介 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。 二、if语句 基本语法 if (条件) { // 代码块1 } 代码示例 #include <stdio.h> int mai…

    C 2023年5月9日
    00
  • C语言学生信息管理系统设计与实现

    C语言学生信息管理系统设计与实现 1. 系统设计 1.1 系统需求分析 在开始实现C语言学生信息管理系统之前,我们需要先进行系统需求分析。从用户需求中得知,该系统需要支持以下功能: 添加学生信息 删除学生信息 修改学生信息 查询学生信息 显示所有学生信息 除此之外,还需要能够保存所有学生信息,方便下次打开程序时能够直接读取已有的学生信息。 1.2 系统架构设…

    C 2023年5月23日
    00
  • 详解QListWidget如何实现自定义Item效果

    下面是详细讲解“详解QListWidget如何实现自定义Item效果”的完整攻略。 1. QListWidget简介 QListWidget是QT中常用的一个列表控件,它能够方便地显示列表数据,并且还支持很多常用的操作,比如单选、多选、拖拽等。在QListWidget中,默认的Item是由QListWidgetItem类提供的,它能够显示一些基本的文本、图标…

    C 2023年5月23日
    00
  • C程序 插入排序

    下面是关于”C程序 插入排序”的完整使用攻略。 插入排序是什么? 插入排序是一种简单直观的、比较常用的排序算法。其基本思想是将待排序的数组分成两部分,已排序和未排序,然后将未排序的元素一个一个插入到已排序部分的正确位置上,直到整个数组都被排序。 插入排序的实现 下面是一份C程序的插入排序实现,以进行升序排序为例。 #include <stdio.h&g…

    C 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部