C++ linux下的cmake

server/2024/9/20 1:23:32/ 标签: c++, 开发语言

        cmake是一个帮助我们构建项目的跨平台工具。让我们不需要一次次手动配置makefile,或者手动去链接库这些操作。

配置

        (基于vscode编辑器)

        在项目main.cpp同级目录下,创建CMakeLists.txt文件,举例内容如下(需自己配置):

//指定构建项目所需的最低cmake版本
cmake_minimum_required(VERSION 3.10) //指定工程的名字(随后输出的可执行文件与其同名)
project(Example) //寻找glm第三方库,第二个参数是指这个库是必须的
find_package(glm REQUITRED) 
find_package(库2 REQUITRED)
find_package(库3 REQUITRED)//通过GLOB命令,采用通配符,加入所有文件
file(GLOB SRC_FILES"${PROJECT_SOURCE_DIR}/src/*.h""${PROJECT_SOURCE_DIR}/src/*.cpp""${PROJECT_SOURCE_DIR}/src/*.c""${PROJECT_SOURCE_DIR}/src/*.cc")//本项目生成一个可执行文件
//第一个参数是项目名(CMAKE_PROJECT_NAME会自动替换成项目名称)
//第二个参数是所有的源文件
add_executable(${CMAKE_PROJECT_NAME} ${SRC_FILES}) //链接库
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE glm)//打开对于C++11新特性的支持
target_compile_features(${CMAKE_PROJECT_NAME} PRIVATE cxx_std_11)//POST_BUILD参数表示:编译后要执行的操作
//POST_BUILD的值表示:将 “根目录/assets文件夹” 拷贝到 “根目录/build/Debug/assets文件夹”
//这样做,我们可以之后在Debug中找到所需的所有文件
add_custom_command(TARGET ${CMAKE_PROJECT_NAME}POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory"${PROJECT_SOURCE_DIR}/assets/" 
)

        在菜单中运行cmake build,会生成可执行文件.exe

链接第三方库

        推荐使用一个微软开发的工具vcpkg,它类似于python语言的pip。

在安装好了vcpkg后,假设要安装 “AKP库”,需要在命令行通过vcpkg安装:

vcpkg install AKP库

如果是在vscode中,只需在cmake时,指定vcpkg工具链即可。

如果是命令行,只需在执行时多传递一个DCMAKE_TOOLCHAIN_FILE参数,如下所示:

cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=<vcpkg安装路径>/scripts/buildsystems/vcpkg.cmake

注意

        一个项目,需要:代码编辑器编译器项目构建器这三样,才最终可以生成可执行文件

cmake仅仅是一个项目构建器,想完整完成一个项目,还需要前两者。


http://www.ppmy.cn/server/113756.html

相关文章

衡石分析平台使用手册-快速入门

快速入门​ 快速指南​ 创建管理员账号​ 按照文档安装成功之后&#xff0c;假设安装所在服务器 IP 是<Server IP>&#xff0c;端口是<Server Port>&#xff0c;则可以通过浏览器访问http://<Server IP>:<Server Port>/ 访问衡石分析平台&#xff0…

代码随想录算法day28 | 动态规划算法part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、 746. 使用最小花费爬楼梯

理论基础 什么是动态规划 动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的&#xff0c;这一点就区分于贪…

任务执行拓扑排序(华为od机考题)

一、题目 1.原题 一个应用启动时&#xff0c;会有多个初始化任务需要执行&#xff0c; 并且任务之间有依赖关系&#xff0c; 例如&#xff1a;A任务依赖B任务&#xff0c;那么必须在B任务执行完成之后&#xff0c;才能开始执行A任务。 现在给出多条任务依赖关系的规则&#x…

银行定期产品

银行存款产品如下: 其中对私的储蓄存款: 定期存款是指存款人在银行或金融机构存入一定金额的资金,并约定一个固定的存期,在存期内不得随意支取,到期后可以获取本金和预先约定好的利息的一种存款方式。根据不同的存取方式和特点,定期存款主要可以分为以下几种类型: 整存…

Redis进阶(二)--Redis高级特性和应用

文章目录 第二章、Redis高级特性和应用一、Redis的慢查询1、慢查询配置2、慢查询操作命令3、慢查询建议 二、Pipeline三、事务1、Redis的事务原理2、Redis的watch命令3、Pipeline和事务的区别 四、Lua1、Lua入门&#xff08;1&#xff09;安装Lua&#xff08;2&#xff09;Lua基…

无人机纪录片航拍认知

写在前面 博文内容为纪录片航拍简单认知&#xff1a;纪录片 航拍镜头&#xff0c;航拍流程&#xff0c;航拍环境条件注意事项介绍航拍学习书籍推荐《无人机商业航拍教程》读书笔记整理&#xff0c;适合小白认知理解不足小伙伴帮忙指正 &#x1f603;,生活加油 99%的焦虑都来自于…

堆-数组的堆化+优先队列(PriorityQueue)的使用

一、堆 1、什么是堆&#xff1f; 以完全二叉树的形式将元素存储到对应的数组位置上所形成的新数组 2、为什么要将数组变成堆&#xff1f; 当数组中的元素连续多次进行排序时会消耗大量的时间&#xff0c;将数组变成堆后通过堆排序的方式将会消耗更少的时间 二、接口 给堆…

OpenSSL Windows编译

目录 1. 源码下载2. vs2022编译 1. 源码下载 源码地址 2. vs2022编译 (1) 将“VS2022安装目录VC\Auxiliary\Build\“设置为PATH环境变量&#xff0c;启动cmd命令行&#xff08;一定要先设置环境变量&#xff09;。 (2)在cmd下进入VS2013安装目录vs2022\VC\Auxiliary\Build&…

心觉:潜意识是一个免费的“超级工作狂”,你居然不会用

我们常听说&#xff1a;潜意识的力量是意识到3万倍以上 你信吗 估计很多人不相信&#xff0c;不相信当然用不好 不相信的原因核心有两个&#xff1a; 没有体验过 寻求绝对的科学验证 这两个原因会让你对潜意识不相信&#xff0c;或者半信半疑 今天我也不会给你绝对的科学…

要在 Windows 系统中通过 VNC 远程连接到 CentOS 或 Ubuntu 服务器,可以按照以下步骤来配置和使用 VNC 进行远程桌面访问

要在 Windows 系统中通过 VNC 远程连接到 CentOS 或 Ubuntu 服务器&#xff0c;可以按照以下步骤来配置和使用 VNC 进行远程桌面访问。 在 CentOS 或 Ubuntu 服务器上配置 VNC 服务 步骤 1&#xff1a;安装 VNC 服务器和桌面环境 对于 CentOS&#xff1a; 安装桌面环境&…

江协科技STM32学习- P9 OLED调试工具

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

uni-app流式接受消息/文件

uni-app流式接受消息/文件 问题描述 今天利用fastgpt搭建了一个局域网进行访问Ai助理&#xff0c;在前端通过api接口进行请求&#xff0c;用于接收后端的发送的流式消息&#xff0c;那么前端可以进行流式的获取到这个消息&#xff0c;也可以进行直接进行在请求发送完成以后&a…

大量数据相似度加速计算

背景 在实际工作中&#xff0c;有100万的数据&#xff0c;需要将100万条数据中&#xff0c;语义相似的聚合一起作为list&#xff0c;由于数据量过大&#xff0c;计算相似性耗时较久 例如&#xff1a; 合并后的数据 [[你好&#xff0c;你好啊&#xff0c;您好&#xff0c;hell…

828华为云征文|华为云Flexus云服务器X实例之openEuler系统下部署GitLab服务器

828华为云征文&#xff5c;华为云Flexus云服务器X实例之openEuler系统下部署Gitlab服务器 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、GitLab介绍2.1 GitLab简介2.2 GitLab主要特点 三、本次…

深入理解C代码中的条件编译

引言 条件编译是 C 编程中的一个重要特性&#xff0c;它允许开发人员根据不同的条件选择性地编译源代码的不同部分。这一特性对于编写跨平台的程序、优化代码性能或控制编译时资源消耗等方面非常重要。本文将深入探讨条件编译的工作原理、使用场景、高级应用以及注意事项&…

【Python机器学习】词向量推理——词向量

目录 面向向量的推理 使用词向量的更多原因 如何计算Word2vec表示 skip-gram方法 什么是softmax 神经网络如何学习向量表示 用线性代数检索词向量 连续词袋方法 skip-gram和CBOW&#xff1a;什么时候用哪种方法 word2vec计算技巧 高频2-gram 高频词条降采样 负采样…

Apache DolphinScheduler在Cisco Webex的应用与优化实践

引言 我叫李庆旺&#xff0c;是Cisco Webex的一名软件工程师&#xff0c;同时也是Apache DolphinScheduler&#xff08;以下简称DS&#xff09;的Committer。 在过去的两年里&#xff0c;公司基于Apache DolphinScheduler进行了多项持续改进和创新&#xff0c;以更好地适应我们…

react、vue 提供的 hook 函数对比

文章目录 useMemo vs computeduseEffect vs watch useMemo vs computed React 的useMemo 和 Vue3 的computed 分别用于优化性能和避免不必要的计算的两个概念。它们的目标相似&#xff0c;但实现方式和使用场景有所不同。它们都用于优化那些依赖于其他状态或属性&#xff0c;并…

string字符会调用new分配堆内存吗

gcc的string默认大小是32个字节&#xff0c;字符串小于等于15直接保存在栈上&#xff0c;超过之后才会使用new分配。

Mac使用Elasticsearch

下载 Past Releases of Elastic Stack Software | Elastic 解压tar -xzvf elasticsearch-8.15.1-darwin-x86_64.tar.gz 修改配置文件config/elasticsearch.yml xpack.security.enabled: false xpack.security.http.ssl: enabled: false 切换目录 cd elasticsearch-8.15.1/…