CMake入门大全

CMake入门大全

  • 设置可以使用的最低 CMake 版本
  • 设置项目名称
  • 添加可执行文件
  • 添加头文件目录
  • 批量添加源文件
  • 添加第三方库
  • 链接第三方库
  • 指定输出路径
  • 指定编译参数(Debug/Release/MinSizeRel/RelWithDebInfo)
  • 指定编译链工具(windows下vcpkg需要)
  • 指定编译器
  • 指定生成器
  • 设置Cpp标准

入门
Hello CMake
CMake 是一个用于配置跨平台源代码项目应该如何配置的工具建立在给定的平台上。

├── CMakeLists.txt # 希望运行的 CMake命令
├── main.cpp # 带有main 的源文件
├── include # 头文件目录
│ └── header.h
└── src # 源代码目录
├── a.c
└── b.c
在此项目上运行 CMake 时,系统会要求您提供二进制目录,运行 CMake 不会创建最终的可执行文件,而是会为 Visual Studio、XCode 或 makefile 生成项目文件。 使用这些工具构建该项目

CMakeLists.txt

设置可以使用的最低 CMake 版本

cmake_minimum_required(VERSION 3.5)

设置项目名称

project (hello_cmake)

添加可执行文件

add_executable(hello_cmake main.cpp)

添加头文件目录

target_include_directories(hello_cmake PRIVATE ./include)

批量添加源文件

file(GLOB SRCS CONFIGURE_DEPENDS ./src/*.cpp)
target_sources(hello_cmake PUBLIC ${SRCS})

添加第三方库

find_package(OpenGL CONFIG REQUIRED)

链接第三方库

target_link_libraries(hello_cmake PRIVATE OpenGL)

指定输出路径

set_property(TARGET hello_cmake ${CMAKE_SOURCE_DIR}/bin)
main.cpp
#include <iostream>int main(int argc, char *argv[])
{std::cout << "Hello CMake!" << std::endl;return 0;
}

编译示例

$ mkdir build   # 创建 build 目录
$ cd build      # 进入目录
$ cmake ..      # 目录的上一级目录运行命令
$ make          # 使用对应的编译工具
$ ./hello_cmake # 运行生成的 hello_cmake

Hello CMake!
cmake
生成项目构建系统

$ cmake [<options>] <path-to-source | path-to-existing-build>bash
$ cmake [<options>] -S <path-to-source> -B <path-to-build>

建立一个项目

$ cmake --build <dir> [<options>] [-- <build-tool-options>]

安装项目

$ cmake --install <dir> [<options>]

运行指定项目

cmake --build <dir> --target <project>

打开一个项目

$ cmake --open <dir>

运行脚本

$ cmake [-D <var>=<value>]... -P <cmake-script-file>

运行命令行工具

$ cmake -E <command> [<options>]

运行查找包工具

$ cmake --find-package [<options>]

运行工作流预设

$ cmake --workflow [<options>]

查看帮助

$ cmake --help[-<topic>]

常用参数
方式一: 在CMakeLists.txt中使用set(KEY VAL)函数
方式二: 在执行cmake … -D 指定(只需一次,推荐)

指定编译参数(Debug/Release/MinSizeRel/RelWithDebInfo)

$ cmake ... -D CMAKE_BUILD_TYPE=DEBUG

指定编译链工具(windows下vcpkg需要)

$ cmake ... -D CMAKE_TOOLCHAIN_FILE=<vcpkg_path>/scripts/buildsystems/vcpkg.cmake

指定编译器

$ cmake ... -D CAMKE_C_COMPILER=...
$ cmake ... -D CAMKE_CXX_COMPILER=...

指定生成器

$ cmake .. -G "Unix Makefile"
$ cmake .. -G "Ninja"
$ cmake .. -G "Visual Studio 17 2022"

设置Cpp标准

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON) # 在检测到不支持时出错
set(CMAKE_CXX_EXTENSIONS ON) #一般设为off,否则在msvc上没有特性会出错

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

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

相关文章

设备树下Led驱动实验-Led驱动加载测试

一. 简介 本文对前面两篇文章实现的 Led驱动程序进行测试。 通过应用程序调用驱动程序&#xff0c;从而进行 Led灯的打开与关闭。 二. Led驱动加载测试 1. 准备测试程序 将 前面实验中 3_newchrled工程中应用程序拷贝到 5_dtsled工程目录下。 进入 5_dtsled工程目录下进…

uncaught referenceError:cannot access ‘xxxStore‘ before initialization

目录 一、问题 二、解决方法 三、总结 tiips:如嫌繁琐&#xff0c;直接移步总结即可&#xff01; 一、问题 1.写代码的时候引入store&#xff0c;居然报错&#xff1a;store没有初始化就被使用了&#xff0c;连页面都打不开了。 1)错误如下&#xff0c;详细错误如下图1-1所…

瑞_Java开发手册_(六)工程结构

文章目录 工程结构的意义(一) 应用分层(二) 二方库依赖(三) 服务器 &#x1f64a;前言&#xff1a;本文章为瑞_系列专栏之《Java开发手册》的工程结构篇&#xff0c;主要介绍应用分层、二方库依赖、服务器。由于博主是从阿里的《Java开发手册》学习到Java的编程规约&#xff0c…

[LitCTF 2023] Web类题目分享

[LitCTF 2023] Web类题目做法及思路解析&#xff08;个人分享&#xff09; 题目平台地址&#xff1a;NSSCTF | 在线CTF平台 一、[LitCTF 2023]我Flag呢&#xff1f; 奇怪&#xff0c;放哪里了&#xff0c;怎么看不见呢&#xff1f;&#xff08;初级难度&#xff09; 1.访问…

基于Harris角点的多视角图像全景拼接算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 Harris角点检测 4.2 图像配准 4.3 图像变换和拼接 4.4 全景图像优化 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 function [ImageB…

C++--默认参数

一.默认参数&#x1f357; C中允许函数提供默认参数&#xff0c;也就是允许在函数的声明或定义时给⼀个或多个参数指定默认值。在调 ⽤具有默认参数的函数时&#xff0c;如果没有提供实际参数&#xff0c;C将⾃动把默认参数作为相应参数的值。 二.使用规则&#x1f357; 1.如果…

Linux ->windows自由复制文件文本

Linux ->windows自由复制文件文本 文章目录 Linux ->windows自由复制文件文本1.更新2.下载软件3.修改配置文件4.创建文件夹tftpboot修改权限为6665.重启服务 1.更新 sudo apt-get update2.下载软件 suod apt-get install tftp-hpa tftpd-hpa3.修改配置文件 sudo vim /et…

ChatGPT 股市知识问答

我 2024-01-17 14:16:38 股市交易的关键指标有哪些&#xff1f; ChatGPT 2024-01-17 14:16:38 股市交易中常用的关键指标有很多&#xff0c;以下是一些常见的指标&#xff1a; 股价指标&#xff1a;股价是衡量股票价格变化的重要指标&#xff0c;包括每股收益&#xff08;EPS…

Spring Boot 配置文件和日志

目录 配置文件格式 properties配置文件说明 1.properties基本语法 2.读取配置文件 3.properties缺点 yml配置文件说明 1.yml基本语法 2.配置不同数据类型 3.字符串特殊情况 4.配置对象 properties和yml对比 日志 日志的使用 日志级别 日志持久化 Lombok Lombo…

【MIdjourney】一些材质相关的关键词

1.多维剪纸(Multidimensional papercut) "Multidimensional papercut"&#xff08;多维剪纸&#xff09;是一种剪纸艺术形式&#xff0c;通过多层次的剪纸技巧和设计来创造出立体感和深度感。这种艺术形式通常涉及在不同的纸层上剪裁不同的图案&#xff0c;并将它们…

蓝桥杯真题(Python)每日练Day1

说明&#xff1a;在CSP认证的基础上&#xff08;可以看看本人CSP打卡系列的博客&#xff09;备赛2024蓝桥杯&#xff08;Python&#xff09;&#xff0c;本人专业&#xff1a;大数据与数据科学 因此对python要求熟练掌握&#xff0c;通过练习蓝桥杯既能熟悉语法又能锻炼算法和思…

Vue表单输入密码实现密码格式和强度验证提示框-demo

实现效果 实现过程 校验 //密码格式校验 const validateUppercase (rule, value, callback) > {if (!/[A-Z]/.test(value)) {callback(new Error(密码必须包含至少一个大写字母));} else {callback();} }; const validateNumber (rule, value, callback) > {if (!/\d…

【论文简介】个性化真实人像生成方法(2024.01.15发布,即将开源)

零样本身份保留生成方法&#xff1a;声称效果好于PhotoMaker&#xff08;即将开源&#xff09; 2401.InstantID: Zero-shot Identity-Preserving Generation in Seconds &#xff1a; 项目主页&#xff1a;https://instantid.github.io/ 一、简介 本文的主要内容是介绍了一种…

代码训练营第36天|● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间

文档讲解&#xff1a;代码随想录 (programmercarl.com) 视频讲解&#xff1a;代码随想录的个人空间-代码随想录个人主页-哔哩哔哩视频 (bilibili.com) LeetCode 435. 无重叠区间 题目链接&#xff1a;435. 无重叠区间 - 力扣&#xff08;LeetCode&#xff09; 代码如下&#…

【驱动】I2C驱动分析(二)-驱动框架

I2C驱动框架简介 I2C 驱动属于总线-设备-驱动模型的&#xff0c;与I2C总线设备驱动模型相比&#xff0c;大体框架是一样&#xff0c;系统的整体框架如下所示。 最上层是应用层&#xff0c;在应用层用户可以直接用open read write对设备进行操作&#xff0c;往下是设备驱动层&a…

多线程编程——线程的属性

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 如果只是学习简单的多线程编程&#xff0c;本文内容可以暂时忽略。在利用pthread_create() 函数创建线程时&#xff0c;第二个参数设置为NULL即可。 一、引入 通过阅读前面章节&…

Jenkins的环境部署,(打包、发布、部署、自动化测试)

一、Tomcat环境安装 1.安装JDK&#xff08;Java环境&#xff09; JDK下载地址&#xff1a;Java Downloads | Oracle 安装好后在系统环境变量里配置环境变量&#xff1a; ①添加JAVA_HOME 变量名&#xff1a;JAVA_HOME变量值&#xff1a;C:\Program Files\Java\jdk1.8.0_18…

前端开发 2: CSS

在前端开发中&#xff0c;CSS&#xff08;层叠样式表&#xff09;是一种用于描述网页样式的语言。它控制着网页的布局、颜色、字体等外观效果。在本篇博客中&#xff0c;我将为你介绍 CSS 的基础知识和常用技巧&#xff0c;帮助你更好地掌握前端开发中的样式设计。 CSS 基础知…

CSS笔记II

CSS第二天笔记 复合选择器后代选择器子选择器并集选择器交集选择器伪类选择器 三大特性继承性层叠性优先级优先级-叠加计算规则 Emmet写法 背景属性背景图平铺方式位置缩放固定复合属性 显示模式转换显示模式 复合选择器 定义&#xff1a;由两个或多个基础选择器&#xff0c;通…

长虹智能电视C1100i、C1080i系列、3D51V50等 ZPM41AiJ机芯 刷机方法,及刷机数据

适用机芯&#xff1a;ZPM41AiJ 适用型号&#xff1a; 3D51C1100i、3D51C1080i、3D51V50 刷机方法&#xff1a; 1、将文件下载到电脑&#xff0c;解压后有3个文件&#xff0c;3个文件放到U盘的根目录。U盘必须使用FAT32格式&#xff1b; 2、将U盘接入电视的USB接口&#…