cmake命令记录

news2025/2/26 6:11:43

1.project(HELLO)
project命令用于设置工程的名称,括号里的参数HELLO便是我们要设置的工程名称;设置工程名称并不是强制性的,但是最好加上。

2.add_executable(hello ./main.c)
add_executable用于生成一个可执行文件,第一个参数代表生成的可执行文件对应的文件名,第二个参数代表对应的源文件。

3.使用out-of-source方式构建
在上面的例子中,cmake 生成的文件以及最终的可执行文件 hello 与工程的源码文件 main.c 混在了一
起,这使得工程看起来非常乱,当我们需要清理 cmake 产生的文件时将变得非常麻烦,这不是我们想看到
的;我们需要将构建过程生成的文件与源文件分离开来,不让它们混杂在一起,也就是使用out-of-source方
式构建。

cd build/
cmake ../
make

../ 是一个相对路径,表示当前目录的上一级目录。
这样cmake生成的中间文件以及make编译生成的可执行文件就全部在build目录下了,如果要清理工

程,直接删除build目录即可,这样就方便多了。

4.set(SRC_LIST main.c hello.c)

"project(HELLO) 
set(SRC_LIST main.c hello.c) 
add_executable(hello ${SRC_LIST})"

set命令用于设置变量,如果变量不存在则创建

该变量并设置它;在本例中,我们定义了一个SRC_LIST变量,SRC_LIST变量是一个源文件列表,记录生
成可执行文件hello所需的源文件main.c和hello.c,而在add_executable命令引用了该变量;当然我们也可
以不去定义SRC_LIST变量,直接将源文件列表写在add_executable命令中,如下:
add_executable(hello main.c hello.c)

5.add_library(libhello hello.c)

"project(HELLO) 
add_library(libhello hello.c) 
add_executable(hello main.c) 
target_link_libraries(hello libhello)"

add_library命令用于生成库文件,在本例中我们传入了两个参数,第一个参数表示库文件的名字,需要

注意的是,这个名字是不包含前缀和后缀的名字;在Linux系统中,库文件的前缀是lib,动态库文件的后
缀是.so,而静态库文件的后缀是.a;所以,意味着最终生成的库文件对应的名字会自动添加上前缀和后缀。
第二个参数表示库文件对应的源文件。
本例中,add_library命令生成了一个静态库文件liblibhello.a,如果要生成动态库文件,可以这样做:
add_library(libhello SHARED hello.c) #生成动态库文件
add_library(libhello STATIC hello.c) #生成静态库文件

6.target_link_libraries(hello libhello)"

target_link_libraries命令为目标指定依赖库,在本例中,hello.c被编译为库文件,并将其链接进hello程

序。

7.set_target_properties(libhello PROPERTIES OUTPUT_NAME “hello”)

修改生成的库文件名字 

"cmake_minimum_required(VERSION 3.5) 
project(HELLO) 
add_library(libhello SHARED hello.c) 
set_target_properties(libhello PROPERTIES OUTPUT_NAME "hello") 
add_executable(hello main.c) 
target_link_libraries(hello libhello) "

set_target_properties用于设置目标的属性,这里通过set_target_properties命令对libhello目标的

OUTPUT_NAME属性进行了设置,将其设置为hello。

8.cmake_minimum_required(VERSION 3.5)
该命令用于设置当前工程的cmake最低版本号要求,当然这个并不是强制性的,但是最好还是加上。

9.add_subdirectory(libhello)
add_subdirectory命令,该命令告诉cmake去子目录中寻找新的CMakeLists.txt文件并解析它

10.include_directories(${PROJECT_SOURCE_DIR}/libhello)

include_directories:这是 CMake 提供的一个命令,用于向编译器的头文件搜索路径中添加指定的目录。在编译 C 或 C++ 项目时,编译器需要知道在哪里找到 #include 指令所引用的头文件,通过这个命令可以告诉编译器额外的搜索路径。
P R O J E C T S O U R C E D I R :这是 C M a k e 内置的一个变量,它代表当前项目的源目录,也就是包含顶级 C M a k e L i s t s . t x t 文件的目录。 / l i b h e l l o :这是一个相对路径,表示在项目源目录下的 l i b h e l l o 子目录。综合起来, i n c l u d e d i r e c t o r i e s ( {PROJECT_SOURCE_DIR}:这是 CMake 内置的一个变量,它代表当前项目的源目录,也就是包含顶级 CMakeLists.txt 文件的目录。 /libhello:这是一个相对路径,表示在项目源目录下的 libhello 子目录。 综合起来,include_directories( PROJECTSOURCEDIR:这是CMake内置的一个变量,它代表当前项目的源目录,也就是包含顶级CMakeLists.txt文件的目录。/libhello:这是一个相对路径,表示在项目源目录下的libhello子目录。综合起来,includedirectories({PROJECT_SOURCE_DIR}/libhello) 命令的作用是将项目源目录下的 libhello 目录添加到编译器的头文件搜索路径中。

11. P R O J E C T B I N A R Y D I R 含义:表示项目的二进制目录,即执行 c m a k e 命令进行构建时所在的目录,用于存放构建过程中生成的中间文件和最终产物,如可执行文件、库文件等。举例:在一个典型的源外构建( o u t − o f − s o u r c e b u i l d )场景中,如果项目的源目录是 / h o m e / u s e r / p r o j e c t / s r c ,而构建目录是 / h o m e / u s e r / p r o j e c t / b u i l d ,那么在 C M a k e 脚本中 {PROJECT_BINARY_DIR} 含义:表示项目的二进制目录,即执行cmake命令进行构建时所在的目录,用于存放构建过程中生成的中间文件和最终产物,如可执行文件、库文件等。 举例:在一个典型的源外构建(out-of-source build)场景中,如果项目的源目录是/home/user/project/src,而构建目录是/home/user/project/build,那么在 CMake 脚本中 PROJECTBINARYDIR含义:表示项目的二进制目录,即执行cmake命令进行构建时所在的目录,用于存放构建过程中生成的中间文件和最终产物,如可执行文件、库文件等。举例:在一个典型的源外构建(outofsourcebuild)场景中,如果项目的源目录是/home/user/project/src,而构建目录是/home/user/project/build,那么在CMake脚本中{PROJECT_BINARY_DIR}就指代/home/user/project/build。
P R O J E C T S O U R C E D I R 含义:代表项目的源目录,即包含项目顶级 C M a k e L i s t s . t x t 文件以及所有源代码、头文件等原始文件的目录。举例:在上述例子中, {PROJECT_SOURCE_DIR} 含义:代表项目的源目录,即包含项目顶级CMakeLists.txt文件以及所有源代码、头文件等原始文件的目录。 举例:在上述例子中, PROJECTSOURCEDIR含义:代表项目的源目录,即包含项目顶级CMakeLists.txt文件以及所有源代码、头文件等原始文件的目录。举例:在上述例子中,{PROJECT_SOURCE_DIR}就指代/home/user/project/src。

12.set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

EXECUTABLE_OUTPUT_PATH 变量控制可执行文件的输出路径

"include_directories(${PROJECT_SOURCE_DIR}/libhello) 
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) 
add_executable(hello main.c) 
target_link_libraries(hello libhello) "

13.set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)

LIBRARY_OUTPUT_PATH 变量控制库文件的输出路径。

"set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) 
add_library(libhello hello.c) 
set_target_properties(libhello PROPERTIES OUTPUT_NAME "hello")"

14.cmake 提供了很多命令,每一个命令都有它自己的功能、作用,通过这个链接地址
https://cmake.org/cmake/help/v3.5/manual/cmake-commands.7.html 可以查询到所有的命令及其相应的介绍、使
用方法等等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2306198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据驱动未来!天合光能与永洪科技携手开启数字化新篇章

在信息化时代的今天,企业间的竞争早就超越了传统产品与服务的范畴,新的核心竞争力即——数据处理能力和信息技术的应用。作为数据技术领域的领军者,永洪科技凭借其深厚的技术积累和丰富的行业经验,成功助力天合光能实现数字化升级…

JavaScript数据结构-模拟链表

在JavaScript中没有链表这种数据结构,但是我们可以用对象(Object)模拟链表,下面让我们先了解链表是什么。 链表(Linked List)是一种基础的数据结构,由一系列节点(Node)组成,每一个节…

tableau之网络图和弧线图

一、网络图 概念 网络图(Network Graph),也称为网络可视化,是数据可视化的一种形式,用于显示实体(节点)之间的关系(边)。这种图表通过节点和边的结构揭示数据中的复杂关…

Linux网络数据包接收:原理、流程与优化策略

在当今数字化时代,网络已成为计算机系统不可或缺的部分。无论是日常的网页浏览、文件传输,还是大规模数据中心的高效通信,网络数据包的收发都在其中扮演着重要角色。对于 Linux 系统而言,深入理解网络数据包的接收过程&#xff0c…

sklearn中的决策树-分类树:实例-分类树在合成数据集上的表现

分类树实例:分类树在合成数据集上的表现 代码分解 在不同结构的据集上测试一下决策树的效果(二分型,月亮形,环形) 导入 import numpy as np from matplotlib import pyplot as plt from matplotlib.colors import Li…

给小米/红米手机root(工具基本为官方工具)——KernelSU篇

目录 前言准备工作下载刷机包xiaomirom下载刷机包【适用于MIUI和hyperOS】“hyper更新”微信小程序【只适用于hyperOS】 下载KernelSU刷机所需程序和驱动文件 开始刷机设置手机第一种刷机方式【KMI】推荐提取boot或init_boot分区 第二种刷机方式【GKI】不推荐 结语 前言 刷机需…

棒球和垒球区别·棒球1号位

棒球运动和垒球运动的区别主要体现在以下几个方面: 1. 用球差异:垒球比棒球大且重。棒球的直径大约是7.3厘米,重量通常在145克左右,外皮由皮革制成,质地较硬。而垒球的直径为9.7厘米,重量大约为180克左右&a…

Redis|持久化

文章目录 总体介绍RDB(Redis DataBase)官网介绍案例演示优势劣势如何检查修复 dump.rdb 文件哪些情况下会触发 RDB 快照如何禁用快照RDB 优化配置项详解小总结 AOF(Append Only File)官网介绍是什么能干嘛AOF 持久化工作流程AOF 缓…

Windows前端开发IDE选型全攻略

Windows前端开发IDE选型全攻略 一、核心IDE对比矩阵 工具名称最新版本核心优势适用场景推荐指数引用来源VS Code2.3.5轻量级/海量插件/跨平台/Git深度集成全栈开发/中小型项目⭐⭐⭐⭐⭐14WebStorm2025.1智能提示/框架深度支持/企业级调试工具大型项目/专业前端团队⭐⭐⭐⭐47…

基于Spring Boot的党员学习交流平台设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

【2025-02-25】基础算法:二分查找(一)

📝前言说明: ●本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,主要跟随B站博主灵茶山的视频进行学习,专栏中的每一篇文章对应B站博主灵茶山的一个视频 ●题目主要为B站视频内涉及的题目以及B站视频中提到的“课后作业”。…

如何在 SpringBoot 项目使用 Redis 的 Pipeline 功能

本文是博主在批量存储聊天中用户状态和登陆信息到 Redis 缓存中时,使用到了 Pipeline 功能,并对此做出了整理。 一、Redis Pipeline 是什么 Redis 的 Pipeline 功能可以显著提升 Redis 操作的性能,性能提升的原因在于可以批量执行命令。当我…

2024年第十五届蓝桥杯青少 图形化编程(Scratch)省赛中级组真题——截取递增数

截取递增数 背景信息 递增数:如果一个大于9的正整数各个数位上的数,从左到右是逐渐变大的,那么就称这个数为递增数。 例如124、248 是递增数。 给你一个不含0的九位数,请找出从这个九位数中能截取出的所有递增数。例如:115367…

【ECMAScript6】

【ECMAScript6】 01. ES6介绍02. let和const命令03. 模板字符串04. 函数之默认值、剩余参数05. 函数之扩展运算符、箭头函数06. 箭头函数this指向和注意事项07. 解构赋值08. 扩展的对象的功能(简写)09. Symbol类型10. Set集合数据类型11. Map数据类型12.…

WebUI 部署 Ollama 可视化对话界面

文章目录 一、Node.js 安装1.系统环境查询2.官网下载nodejs 安装包3.安装 Node.js 并配置环境变量4.验证安装是否正确 二、ollama-webui 安装与配置1.代码库下载2.依赖安装3.运行 三、遇到问题与解决 一、Node.js 安装 1.系统环境查询 ubuntu20.04 系统,x86-64架构…

BMS应用软件开发 — 17 上下电控制与诊断开发 (Simulink)

目录 17.1 上下电控制流程 17.1.1 上下电流程 17.1.2 下电过程的电机放电 17.1.3 继电器状态检测 17.2 预充继电器状态判断 17.1 上下电控制流程 17.1.1 上下电流程 高压上电是指动力电池为车辆提供高压,使高压回路导通,为车辆的各个高压部件供电&…

使用Open WebUI下载的模型文件(Model)默认存放在哪里?

🏡作者主页:点击! 🤖Ollama部署LLM专栏:点击! ⏰️创作时间:2025年2月21日21点21分 🀄️文章质量:95分 文章目录 使用CMD安装存放位置 默认存放路径 Open WebUI下…

005:Cesium.viewer 知识详解、示例代码

查看本专栏目录 - 本文是第 005个API内容详解 vue+cesium 示例教程200+目录 文章目录 一、Cesium.Viewer 知识详解1. 主要用途2. 构造函数与参数3. 常用属性(1)`viewer.scene`(2)`viewer.camera`(3)`viewer.entities`(4)`viewer.clock`4. 常用方法(1)`viewer.zoomTo(…

蓝桥杯单片机组第十二届省赛第二批次

前言 第十二届省赛涉及知识点:NE555频率数据读取,NE555频率转换周期,PCF8591同时测量光敏电阻和电位器的电压、按键长短按判断。 本试题涉及模块较少,题目不难,基本上准备充分的都能完整的实现每一个功能,并…

AI客服-接入deepseek大模型到微信(本地部署deepseek集成微信自动收发消息)

1.本地部署 1.1 ollama Ollama软件通过其高度优化的推理引擎和先进的内存管理机制,显著提升了大型语言模型在本地设备上的运行效率。其核心采用了量化技术(Quantization)以降低模型的计算复杂度和存储需求,同时结合张量并行计算&…