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

大模型-高通qnn基础

提供较低级别、高度可定制的统一API,通过单独的库加速所有AI加速器核心上的AI模型, 可以直接用于针对特定的加速器核心或从流行的运行时(包括Qualcomm Neural Processing SDK、TensorFlow Lite和ONNX运行时)委派工作负载。一个支持异构计算、系统级配置的一体化SDK,旨在将AI工作负载引导到我们平台上的所有加速器核心。为开发人员提供灵活性,包括核心间协作支持和其他高级功能。是一个为训练好的神经网络模型提供高级量化和压缩技术的库。

点滴的岁月 4093

ARIMA模型的R实现

1.模型简介 ARIMA模型,全称差分自回归移动平均模型。可以看作是差分运算和ARMA模型的结合。主要是针对具有线性趋势的非平稳的时间序列,来进行建模预测。 ARIMA模型的形式如下: Φ(B)∇

heirenmin的博客 1万+

【CMake】cmake的install指令

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

Yngz_Miao的博客 15万+

CSI Tools 工具的安装 Intel 5300 + Ubuntu14.04

在 ubuntu14 系统上面安装 CSI Tools,2020最新教程,亲测可用,只要保证和我做法一致绝对可以安装好。

WS的小屋 1万+

CMake中include指令介绍

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

liitdar的博客 7万+

Blender - Shrinkwrap - 更方便的制作贴合模型的表面来建模

Shrinkwrap 修改器 使用 Blender 想要快速建模可以贴合现有模型表面的效果:衣服、皮肤、等效果,可以使用 Shrinkwrap 修改器,这个修改器的名字其实按照英文上的理解,翻译为:收缩的包裹效果 应用 如这块铁皮,它要贴合机身弯曲的效果,可以先建好一个铁皮,再 Shrinkwrap 到一个指定的网格上 留意的参数 Target 要贴合的对象(目前我已知是可以贴合到网格对象上,实在是方便) VertexGroup 顶点组,和之前讲到过的,顶点组可以组设顶点的权重,意思这个可.

Jave.Lin 的学习笔记 6072

【cmake实战九】cmake 常用指令

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

junxuezheng的博客 2497

基于STM32的设计智慧超市管理系统(带收银系统+物联网环境监测)_167

本系统主要由超市环境监测部分和商品管理部分组成。环境监测部分主控芯片采用STM32F103C8T6,主要包括温湿度传感器、烟雾传感器和空调制热开关、空调制冷开关,采集的数据通过ESP8266模块+MQTT协议上传至OneNet云平台,在OneNet云平台设计手机和电脑版本可视化页面,能够在页面上查看超市的环境信息,还能在页面上手动打开空调制热开关和空调制冷开关。商品管理部分主要由RC522-RFID读卡器、上位机组成,实现商品选购、结算、顾客的VIP会员卡注册管理等功能。

6069

CMake指令

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

weixin_47695827的博客 1927

[nvidia-GB200-安装]ubuntu24.04高端GPU gb200 570.158.01驱动安装解读及gb200一键化安装脚本,复制即可安装

【代码】[nvidia-GB200]高端GPU gb200 驱动安装解读及gb200一键化安装脚本,复制即可安装。

jundao1997的专栏 874

手把手教您 Claude 桌面端无需账号订阅,免费接入国产自定义大模型(Claude Desktop 绕过订阅限制,接入任意自定义 AI 模型)

无需官方账号,也能畅玩Claude桌面端!本文详解Claude Desktop如何跳过登入接入自定义大模型,轻松解锁Cowork、Code等强大功能🚀

XiaoqiangClub的博客 5414

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

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

weixin_45474825的博客 1041

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

CMake常用指令

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

fight_666的博客 4204

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【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、付费专栏及课程。

余额充值