首页 > 其他分享 >CMake基础(三) - Cmake实战

CMake基础(三) - Cmake实战

时间:2023-06-26 10:35:24浏览次数:30  
标签:实战 CMakeLists CMake Math DIR CMAKE Cmake txt math

一个实战教程,通过一个具体的示例来演示如何使用 CMake 构建和管理一个 C++ 项目。

这里有一个简单的数学库,其中包含两个源文件 math.cpp 和 math.h,并且有一个示例程序 main.cpp 使用该库。

以下是项目的目录结构:

- MyMathLib
    - CMakeLists.txt
    - src
        - main.cpp
    - mathlib
        - CMakeLists.txt
        - math.cpp
        - math.h

步骤 1: 创建项目目录和文件

首先,在您选择的位置创建名为 MyMathLib 的文件夹,并在其中创建上述目录结构。

步骤 2: 编写 mathlib/CMakeLists.txt 文件

在 mathlib 目录下创建 CMakeLists.txt 文件,并添加以下内容:

# 添加库文件
add_library(Math math.cpp math.h)

# 设置 Math 库的导出路径
set_target_properties(Math PROPERTIES
    ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib
    LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib
    RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
)

# 添加 Math 库的包含路径
target_include_directories(Math PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
  • ${CMAKE_BINARY_DIR} 表示 CMake 构建系统的根目录路径,它用于引用构建过程中生成的文件、目录或路径。
  • ${CMAKE_CURRENT_SOURCE_DIR} 是一个 CMake 变量,表示当前正在处理的 CMakeLists.txt 文件所在的目录路径
  • target_include_directories 函数用于向目标(例如库或可执行文件)添加包含路径, 告诉 CMake 在编译 Math 库时,在该目录中查找头文件
  • PUBLIC 参数将这个包含路径设置为公共的,这意味着其他使用 Math 库的目标也可以访问到这个包含路径

这段代码定义了一个名为 Math 的库,将 math.cpp 和 math.h 文件编译为库文件,并将输出路径设置为 ${CMAKE_BINARY_DIR}/lib

步骤 3: 编写主 CMakeLists.txt 文件

在项目的根目录下创建 CMakeLists.txt 文件,并添加以下内容:

# 设置项目名称和版本号
project(MyMathLib VERSION 1.0)

# 添加可执行文件
add_executable(MyExecutable src/main.cpp)

# 添加 mathlib 子目录
add_subdirectory(mathlib)

# 链接 Math 库到可执行文件
target_link_libraries(MyExecutable Math)

这段代码定义了项目名称和版本号,并添加了一个名为 MyExecutable 的可执行文件,将 mathlib 子目录添加为子项目,并链接 Math 库到可执行文件。

步骤 4: 构建项目

现在,打开终端,切换到项目根目录,并执行以下命令:

mkdir build
cd build
cmake ..

这将在 build 文件夹中生成构建文件。

接下来,执行以下命令来编译和构建项目:

cmake --build .

这将使用生成的构建文件来编译和构建项目。

步骤 5: 运行示例程序

在构建成功后,您可以在 build 文件夹中找到生成的可执行文件 MyExecutable。执行以下命令来运行示例程序:

./MyExecutable

这样,您就成功构建并运行了使用 Math 库的示例程序。

标签:实战,CMakeLists,CMake,Math,DIR,CMAKE,Cmake,txt,math
From: https://www.cnblogs.com/anqwjoe/p/17504675.html

相关文章

  • React实战--利用甘特图和看板,强化Paas平台应用
    概述这是一篇React在kintone上的实战,我们需要利用看板和甘特图来来强化项目管理app。另外这次用到了webpack,想了解基本配置思路的可以看这里项目地址GitHub-kintone-samples/SAMPLE-kintone-ganttchart-kanban-cn:projectmanagerforkintone,usingGanttandKanban效......
  • React实战--利用甘特图和看板,强化Paas平台应用
    ​概述这是一篇React在kintone上的实战,我们需要利用看板和甘特图来来强化项目管理app。另外这次用到了webpack,想了解基本配置思路的可以看这里项目地址GitHub-kintone-samples/SAMPLE-kintone-ganttchart-kanban-cn:projectmanagerforkintone,usingGanttandKan......
  • [ARM 汇编]高级部分—ARM汇编编程实战—3.3.2 嵌入式开发环境搭建
    搭建一个嵌入式开发环境主要包括以下几个部分:安装交叉编译器配置集成开发环境(IDE)安装调试工具下载和烧录程序接下来,我们将详细介绍每个部分,并提供相应的实例。安装交叉编译器交叉编译器是用于将您编写的ARM汇编代码编译成可执行文件的工具。在本教程中,我们将使用GNUAR......
  • [ARM 汇编]高级部分—ARM汇编编程实战—3.3.3 嵌入式应用程序设计实例
    在本章节中,我们将学习如何使用ARM汇编编写一个简单的嵌入式应用程序。我们将以STM32F103微控制器为例,编写一个程序,实现按下按钮时点亮LED的功能。硬件连接首先,我们需要将STM32F103微控制器的一个GPIO引脚连接到LED(通过一个合适的电阻),另一个GPIO引脚连接到按钮。假设我们使用以......
  • TensorFlow11.3 循环神经网络RNN-情感分类实战
    这个就是好评和差评的一个分类。这个输入一般\(h_0\)全为0.要想实现这个结构有两种方案:SimpleRNNCell(这个更接近原理)singlelayermulti-layersRNNCell(这个方便使用)1.加载数据(x_train,y_train),(x_test,y_test)=keras.datasets.imdb.load_data(num_words=1000)#......
  • 下载中间件实战-Scrapy与Selenium结合
    下载中间件实战-Scrapy与Selenium结合有的页面反爬技术比较高端,一时破解不了,这时我们就是可以考虑使用selenium来降低爬取的难度。问题来了,如何将Scrapy与Selenium结合使用呢?思考的思路: 只是用Selenium来帮助下载数据。因此可以考虑通过下载中间件来处理这块内容。Spider文......
  • kubesphere多租户实战
    一、说明目前kubesphere3.3.2做了一些改变,将角色分为三级,分别是平台角色、空间角色、项目角色二、平台角色platform-self-provisioner:创建企业空间,并成为所创建的企业空间的管理员(企业空间管理员)platform-regular:被邀请加入企业空间之前无法访问任何资源(普通用户)platform-admin:管......
  • 【大数据OLAP技术新书推荐】 字节跳动、阿里巴巴大厂资深架构师程序员多年实践经验总
    ClickHouse领域集大成之作-ClickHouse入门进阶实战的标准参考书-日常工作案头必备!如果需要购买阅读的话,可以点击:https://item.jd.com/10077635610807.html目录《ClickHouse入门、实战与进阶》简介图书评价作者简介内容简介为何写作本书本书主要特点如何阅读本书致谢全书目......
  • 课程介绍:YOLOv8实战火焰和烟雾检测 (视频教程)
    课程链接:https://edu.51cto.com/course/34090.htmlYOLOv8基于先前YOLO版本在目标检测任务上的成功,进一步提升性能和灵活性。本课程将手把手地教大家使用YOLOv8结合可变形卷积(deformableconvolution)训练火焰和烟雾数据集,完成一个多目标检测实战项目,可实时检测图像、视频、摄像......
  • 深度Q网络:DQN项目实战CartPole-v0
    摘要:相比于Qlearning,DQN本质上是为了适应更为复杂的环境,并且经过不断的改良迭代,到了NatureDQN(即VolodymyrMnih发表的Nature论文)这里才算是基本完善。本文分享自华为云社区《强化学习从基础到进阶-案例与实践[4.1]:深度Q网络-DQN项目实战CartPole-v0》,作者:汀丶。1、定义算法......