CMake项目实战指令详细分析

C C++最新CMake项目实战指令详细分析_cmake怎么输出详细编译指令,2024年最新手把手教你5G时代Webview的正确使用姿势 现阶段,你只需要知道SET可以显式的定义变量即可。如果有多个源文件,还可以这样定义:SET(SRC_LIST main.c t1.c t2.c),这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新** 阅读详情

CMake是一个跨平台的自动化构建系统,可以用简单的语句来描述所有平台的编译过程。CMake可以输出各种各样的编译文件,如Makefile、VisualStudio等。

CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库(so (shared object))。

你可以在CMakeLists.txt中指定源文件、头文件、库文件、链接库等信息,然后通过cmake命令生成相应的makefile文件。

1. 单main.c文件输出"hello world"

mian.c

#include <stdio.h>
int main(){
    printf("hello world!\n");
    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.15) 
PROJECT(HELLO)
SET(CMAKE_C_COMPILER gcc)

SET(SRC_LIST main.c)
MESSAGE(STATUS "This is BINARY dir" ${HELLO_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir" ${HELLO_SOURCE_DIR})
ADD_EXECUTABLE(hello ${SRC_LIST})
  • cmake_minimum_required(VERSION X.X) : 指定cmake的最低版本。

  • project( project_name ) : 指定工程名称,这个指令隐式的指定了两个CMake变量,那就是<project_name>_BINARY_DIR,<project_name>_SOURCE_DIR。在这个例程中,我们命名project_name为HELLO,所以也指定了HELLO_BIARY_DIR和HELLO_SOURCE_DIR。所以当我们更改了工程名之后,<project_name>_BINARY_DIR和<project_name>_SOURCE_DIR也要跟着改变。但是!如果我们使用PROJECT_BINARY_DIR和PROJECT_BINARY_DIR,那么工程名随便改动,这两个变量名会随之改变。

    MESSAGE(STATUS "This is BINARY dir" ${PROJECT_BINARY_DIR})
    MESSAGE(STATUS "This is SOURCE dir" ${PROJECT_SOURCE_DIR})
    
  • set(CMAKE_C_COMPILER gcc) : 指定CMake使用gcc编译器来编译C代码

  • SET(SRC_LIST main.c) : SET 还可以显式的定义变量,语法是这样的:

    SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]]) 
    

    现阶段,你只需要知道SET可以显式的定义变量即可。如果有多个源文件,还可以这样定义:SET(SRC_LIST main.c t1.c t2.c)

  • MESSAGE的语法是这样的:

    MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "message to display" ...)
    

    这个指令用于向终端输出用户定义的信息,包含了三种类型:

    1. SEND_ERROR,产生错误,生成过程被跳过。

    CMake Error at CMakeLists.txt:6 (MESSAGE):
    This is BINARY dir/home/zch/CmakePratice/t1/build

    CMake Error at CMakeLists.txt:7 (MESSAGE):
    This is SOURCE dir/home/zch/CmakePratice/t1

    1. SATUS,输出前缀为–的信息。

    – This is BINARY dir/home/zch/CmakePratice/t1/build
    – This is SOURCE dir/home/zch/CmakePratice/t1

    1. FATAL_ERROR,立即终止所有 cmake 过程.

    CMake Error at CMakeLists.txt:6 (MESSAGE):
    This is BINARY dir/home/zch/CmakePratice/t1/build

    – Configuring incomplete, errors occurred!

  • ADD_EXECUTABLE(hello ${SRC_LIST})
    定义了这个工程会生成一个文件名为 hello 的可执行文件,相关的源文件是 SRC_LIST 中
    定义的源文件列表, 本例中你也可以直接写成 ADD_EXECUTABLE(hello main.c)。

2. 使"hello world"更像一个工程文件

命令词典

  1. add_definitions()
    add_definitions()是CMake中的一个函数,用于向编译器添加预处理器定义。这个命令可以用来添加任何标志,但它的目的是添加预处理器定义。

    例如,如果你想在编译时定义一个名为DEBUG的宏,你可以使用以下命令:add_definitions(-DDEBUG)。
    那么在代码中就可以用到:

    #ifdef DEBUG
    	do_something();
    #else
    	do_other_something();
    #endif
    
  2. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O3 -march=native ")

    它设置了C编译器的标志。这个命令告诉CMake在编译时使用-Wall选项来启用所有警告,-O3选项来启用最高级别的优化,并使用-march=native选项来生成针对本地CPU的代码。如果你想设置其他标志,只需将它们添加到这个命令中即可将这些设置加入到CMAKE_C_FLAGS变量中,以便在代码中生效。

  3. target_link_libraries()命令和add_executable()命令的执行顺序
    在CMake中,target_link_libraries()命令需要放在add_executable()之后。这是因为add_executable()命令定义了要编译的可执行文件,而target_link_libraries()命令指定了要链接到可执行文件中的库。

    如果你尝试在add_executable()之前使用target_link_libraries()命令,CMake将无法找到要链接的目标,因为它还没有被定义。

    相反,link_libraries()命令可以在add_executable()之前使用,但它不如target_link_libraries()命令灵活。link_libraries()命令将库链接到所有目标中,而target_link_libraries()命令只将库链接到指定的目标中。

  4. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY)
    设置CMake生成的可执行文件的输出目录。这个命令将可执行文件的输出目录设置为指定的目录。

    例如,如果你想将可执行文件输出到build/bin目录中,你可以使用以下命令:

    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
    

    这将把可执行文件输出到build/bin目录中。

  5. link_directories(${LINK})
    link_directories(${LINK_DIR}) 是 CMake 中的一个命令,用于添加需要链接的库文件目录。它相当于 g++ 命令的 -L 选项的作用,也相当于环境变量中增加 LD_LIBRARY_PATH 的路径的作用。该命令可以指定第三方库所在路径,比如,你的动态库在 /home/myproject/libs 这个路径下,则通过命令:LINK_DIRECTORIES (/home/myproject/libs),把该路径添加到第三方库搜索路径中,这样就可以使用相对路径了,使用 TARGET_LINK_LIBRARIES 的时候,只需要给出动态链接库的名字就行了。

cmake教程|cmake入门实战 旧博文,搬到 csdn 原文:http://rebootcat.com/2020/09/02/cmake/ 前言 我是一个 linux c++ 开发者,但是一直对 Makefile 的语法很是头痛,每次都记不住,所以每次写 Makefile 都很痛苦,Makefile 里需要你自己编写依赖和推导规则,这个过程能不能简单点呢? 对于编译一个 C++ 工程来说,也许需要的就是头文件路径、库路径、编译参数,剩下的东西基本也不重要,这三样足够去编译一个工程了。所以有没有一个工具能简单点的去实现 C++ 项目的构. 阅读详情

相关推荐

CMake在Linux下生成程序并输出指定消息

CMake是一个跨平台的开源构建工具,它可以用于生成和管理多种编程语言的项目。本文将向您展示如何使用CMake在Linux下生成程序,并在生成过程中输出指定的消息。希望本文能帮助您了解如何使用CMake在Linux下生成程序并输出指定的消息。如果您看到了CMake的版本信息,那么说明CMake已经正确安装在您的系统中。接下来,我们将创建一个简单的C++程序,并使用CMake生成可执行文件。这证明我们成功地使用CMake在Linux下生成程序,并输出了指定的消息。文件,并生成构建所需的Makefile。

HackCyberX的博客 267

CMake的简单应用

众所周知,任意一个C++程序都可以用g++来编译,但当程序规模越来越大时,一个工程可能有许多个文件夹和源文件,如果仅靠g++命令,则需要输入大量的编译指令,整个编译过程则会变得异常复杂,这时,使用一些工程管理工具则会更加高效,比如cmake,接下来将介绍一下cmake的简单应用

举个栗子的博客 1363

CMake:message输出消息

DEPRECATION:如果CMAKE_ERROR_DEPRECATED或CMAKE_WARN_DEPRECATED被使能,会输出此类错误或警告消息。其中TRACE和STATUS类型的消息会被输出到stdout,其他类型的消息会被输出到stderr。TRACE:最低等级的消息,通常用于跟踪一些细节,发布项目时通常不会包含此类信息。DEBUG:通常用于开发者调试输出的信息,项目的使用者不会在意此类信息。SEND_ERROR:用于错误,cmake会继续执行,但会跳过生成步骤。

风静如云的博客 2017

cmake编译过程输出细节信息

cmake经常用于构建开源软件,配置和编译的一般步骤如下: $ mkdir build $ cd build $ cmake ../ $ make 编译过程一般是这样的: [ 1%] Building C object CMakeFiles/websockets.dir/lib/core/alloc.c.o [ 1%] Building C object CMakeFiles/websockets.dir/lib/core/buflist.c.o [ 2%] Building C objec

justin2009212407的专栏 6485

Electron多窗口开发避坑指南:Pinia状态同步的3种解决方案对比

本文深入探讨了在Electron多窗口应用中实现Pinia状态同步的三种核心方案。针对Electron多窗口架构下状态隔离的挑战,文章对比了基础事件通信、共享存储以及智能Pinia插件等方案的优劣与适用场景,并提供了生产级的实现指南与选型建议,帮助开发者构建健壮高效的桌面应用。

spice的博客 479

保姆级教程:在K230开发板上为张大头步进电机实现位置、速度、回零全功能控制

本文提供了一份详细的K230开发板与张大头步进电机的控制教程,涵盖硬件连接、协议解析、模块化代码实现及实战案例。通过位置、速度和回零功能的全面讲解,帮助开发者快速掌握步进电机的高级控制技术,适用于自动化、机器人等应用场景。

weixin_42629671的博客 712

【CMake】cmake的install指令

在cmake的时候,最常见的几个步骤就是: mkdir build && cd build cmake .. make make install 那么,make install的时候,是需要我们定义一个install的目标么? 显然并不需要,作为一个经常需要被运行的指令,官方提供了一个命令install,只需要经过该命令的安装内容,不需要显示地定义install目标。此时,mak...

Yngz_Miao的博客 15万+

8台 × 8卡 910B NPU之顶尖大模型选型分析

本文对比了2026年主流大语言模型在昇腾910B NPU集群上的部署方案。重点评估了GLM5、MiniMax M2.5、Kimi K2.5、DeepSeek V3.2和Qwen 3.5旗舰版等候选模型,从部署需求(显存占用)、能力表现(基准测试、多模态支持)和NPU生态适配度三个维度进行分析。结果显示DeepSeek V3.2综合表现最优:支持BF16/W8A8/INT4量化,在4TB显存环境下可实现2000+ TPS,首token延迟<100ms,且具备官方NPU支持。备选方案Qwen 3.5旗舰版

FeelTouch Labs 758

CMake中include指令介绍

本文主要介绍CMake中include指令的相关知识。引用CMake官网中对于include指令的介绍,如下:include指令的用法如下:详细描述如下:从上述内容可知,include指令用来载入并运行来自于文件或模块的CMake代码。在这里针对一些具体的问题场景,介绍include指令的具体用法。有时遇到这样一种需求,在使用同一个外层CMakeLists.txt的前提下,每个源码子目录中要求使用的C++标准版本不同,有的源码要求使用C++98标准编译、有的源码要求使用C++11标准编译,这时就可以使用in

liitdar的博客 7万+

Netapp FAS2750更换磁盘后不同步问题处理

netapp fas2750磁盘更换后不同步问题处理

jetliu05的博客 1256

YOLOv11改进 | Mamba-YOLOv11-L:基于SSM的高效全局建模,精度与效率的双重突破

摘要: 本文提出Mamba-YOLOv11-L,通过集成状态空间模型(SSM)改进YOLOv11的全局建模能力。针对YOLOv11在复杂场景中全局依赖缺失、精度-效率矛盾等问题,SSM以$O(N)$计算复杂度实现长程语义捕捉。改进后的模型在工业缺陷检测(Recall↑12%)、边缘设备部署(内存↓16%)、多尺度目标检测(小目标mAP↑9%)等场景表现优异,推理速度保持>40 FPS。核心创新包括轻量化SSM模块设计(稀疏状态转移+局部上下文融合)及与YOLOv11骨干的深度集成,代码实现展示了SSM

走向CTO的路上... 570

【cmake实战九】cmake 常用指令

OPTIONAL 参数的作用是文件不存在也不会产生错误。你可以指定载入一个文件,如果定义的是一个模块,那么将在 CMAKE_MODULE_PATH 中搜 索这个模块并载入。用来载入 CMakeLists.txt 文件,也用于载入预定义的 cmake 模块.(本例子中没有用到)VERSION 指定构建的版本号,SOVERSION 指定构建的 API 版本号。#可执行文件输出目录。#静态库文件输出目录。

junxuezheng的博客 2497

泰凌微8258入门教程——导读

基于泰凌微TLSR8258 Bluetooth® SIG Mesh 的入门系列教程

2万+

CMake指令

在CMake中,常用的指令对于定义项目的构建过程至关重要。

weixin_47695827的博客 1927

FPGA实现串口的任意字节数接收

基于FPGA的任意字节数(单字节、多字节)的串口(UART)接收,真的不来看看吗?

孤独的单刀 1万+

Android一个APP里面最少有几个线程

Android应用启动时,默认会创建一个进程,该进程中最少包含负责处理用户交互、UI更新等核心操作,所有与界面相关的逻辑必须在此线程执行。若在此线程执行耗时操作(如网络请求),会导致界面卡顿甚至触发ANR(应用无响应)。当对象重写了finalize()方法时,该线程负责将这些对象放入队列并调用其finalize()方法,完成资源释放后再由GC回收。监控的执行效率。如果finalize()方法执行超时(默认10秒),此线程会触发虚拟机退出以防止应用长时间阻塞。

编程进化论 613

CMake常用指令详解与实战指南(二)

CMake是一个跨平台的自动化构建系统,通过CMakeLists.txt脚本管理项目的构建过程。本文介绍了CMake的常用指令,包括cmake_minimum_required、project、add_executable、add_library、target_link_libraries等,用于定义项目、创建可执行文件和库、链接依赖库等。此外,还介绍了变量设置、目录管理、条件语句、循环、查找依赖库、自定义命令和安装规则等高级功能。最后,通过一个“HelloWorld”项目示例,展示了如何综合使用这些指令进

weixin_45474825的博客 1041

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

CMake指令入门 ——以构建OpenCV项目为例

CMake指令入门 转自:https://blog.youkuaiyun.com/sandalphon4869/article/details/100589747 一、安装 sudo apt-get install cmake 安装好后,输入 cmake -version 如果出现了cmake的版本显示,那么说明安装成功 二、cmake编译 cmake的作用就是将在IDE编译器中的编译功能拿出来,可以在终端上完成。类似于vim和文本编辑器。 cmake的编译方式: 内部构建(in-source-build)

weixin_44966641的博客 2329

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

CMake常用指令

cmake常用指令 cmake教程 -march=native include_directories()和target_include_directories()区别

fight_666的博客 4204

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【CMake】CMake的configure_file指令

有些时候,我们需要在项目中标明版本号、Git的hash号、编译时间等信息,但是显然,对于Git的hash号、编译时间我们不想自己手动填写。现在提供一种途径,将这些信息写入到头文件中,再编译到so库文件或者可执行程序中。 这样,就可以通过提供库文件的接口或者可执行程序的打印中得到这些值了。 本文实例源码github地址:https://github.com/yngzMiao/yngzmiao-blo...

Yngz_Miao的博客 3万+

CMake常用变量和指令

通过一个或多个CMakeLists.txt文件来控制CMake项目,CMakeLists.txt中包含一系列命令来描述需要执行的构建。 1. CMake语法 CMakeLists.txt中的指令格式是: command(args1 args2 …) command代表不同的命令,args是不同的参数,多参数之间用空格隔开。 2. CMake 常用变量 CMAKE_BINARY...

牧野的博客 1万+

CMake中include指令用法介绍

转载于:https://blog.youkuaiyun.com/liitdar/article/details/81144461 本文主要介绍CMake中include指令的用法。 1 概述 引用CMake官网对于include指令的介绍,如下: Load and run CMake code from a file or module. include指令的用法如下: include(<file|module> [OPTIONAL] [RESULT_VARIABLE <VAR...

leoking01的专栏 4072

CMake指令:project

CMake中的project指令用于定义项目基本信息,包括名称、版本、语言等。主要功能包括:1)设置必选的项目名称和可选的版本号、语言支持等参数;2)自动创建相关变量如PROJECT_NAME、PROJECT_VERSION等;3)支持C++标准指定、多项目嵌套和跨平台配置。该指令通常置于顶级CMakeLists.txt开头,是CMake项目的核心配置入口,能有效提升项目的可维护性和跨平台兼容性。使用注意事项包括版本号格式要求、语言选项配置以及避免多次调用等。

红军不怕远征难,万水千山只等闲 1740

CMake常用指令详解与实战指南

本文系统介绍了CMake的核心指令及其应用,帮助开发者快速掌握CMake的关键语法。文章首先分类详解了基础配置、目标构建、头文件与路径管理、依赖管理及流程控制等常用指令,并通过实战示例展示了其具体用法。随后,对比了include_directories与target_include_directories、link_directories与target_link_libraries的优劣,强调了现代CMake的最佳实践。最后,提供了模块化项目结构和分层配置的示例,并解答了常见问题。通过本文,开发者可以掌握C

weixin_45474825的博客 585

使用CMake构建OpenCV项目

上一篇文章中,我们介绍了如何在ubuntu上安装配置OpenCV,这篇文章我们来对我们的安装进行测试,并介绍如何用CMake工具快捷地构建OpenCV项目。 项目结构 为了使整个项目更加条理,我们的文件夹采用如下组织方式: bin build CMakeLists.txt src 其中bin目录用于放编译生成的可执行文件,build目录用于cmake构建项目,src用于放源代码。 O...

退休码农飞伯德 4万+
上一篇: C++并发编程之五 高级线程管理
下一篇: 深入浅出 Fast DDS网络协议(入门篇)
ZHAOCHENHAO-
博客等级 码龄10年 2774粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值