Cmake使用笔记1

在这里插入图片描述

cmake 问题1:

Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.19043.

问题分析

在Windows平台上,使用CMake或Visual Studio等开发工具时,选择正确的Windows SDK版本以确保你的应用程序能够针对目标Windows版本进行编译和运行是很重要的。在你给出的例子中,你希望针对Windows 10版本19043(也称为Windows 10 20H2或更新版本)进行开发,但你选择了Windows SDK版本10.0.19041.0。

Windows SDK版本10.0.19041.0对应于Windows 10 2004(也称为20H1)的更新。虽然它可能包含大多数用于开发Windows 10 20H2应用程序所需的API和工具,但为了确保最佳兼容性和利用新版本的特定功能,你可能想要选择一个更新版本的SDK。

以下是几个步骤,指导你如何在CMake或Visual Studio中选择正确的Windows SDK版本:

在CMake中:

打开CMake GUI或命令行界面。
在配置步骤中,找到设置Windows SDK版本的选项。这通常是通过设置CMAKE_SYSTEM_VERSION变量或类似的变量来完成的,但具体的实现可能因CMake版本和工具链而异。
如果你使用的是CMake的toolchain文件(例如,针对Visual Studio的vs2019.toolchain.cmake),请在该文件中查找并修改SDK版本设置。
重新运行CMake配置步骤,以确保使用新的SDK版本。
在Visual Studio中:

打开你的项目或解决方案。
在“解决方案资源管理器”中,右键点击你的项目,然后选择“属性”。
在项目属性页中,导航到“配置属性”>“常规”部分。
在“Windows SDK版本”下拉菜单中,选择与你目标Windows版本相对应的SDK版本。在这个例子中,你可能需要选择一个高于或等于10.0.19043.0的版本(如果可用)。
点击“应用”和“确定”保存更改。
请注意,Windows SDK的版本可能因你的Visual Studio版本和已安装的SDK版本而异。确保你已经安装了与目标Windows版本相对应的SDK版本。你可以通过Visual Studio安装程序或Windows SDK安装程序来安装或更新SDK。

问题解决

在cmake 命令行下

cmake -DCMAKE_SYSTEM_VERSION=8.1 … 其它 选 项 #指定 windows 8.1 sdk

-DCMAKE_SYSTEM_VERSION=10.0 #这个是指定 用windows 10 sdk

cmake 通过命令行指定输出目录

在 CMake 中,虽然你不能直接在命令行上指定输出目录(即目标文件、库和可执行文件的最终位置),但你可以通过修改 CMakeLists.txt 文件或使用 CMake 的命令行选项来影响构建过程,从而间接地设置输出目录。

不过,如果你想要在命令行中指定构建目录(即 CMake 生成构建系统文件的位置),你可以使用 -B 选项。这个选项允许你指定一个目录,CMake 将在这个目录中生成构建文件(如 Makefile)。但是,这并不直接设置输出目录;它只是改变了构建文件生成的位置。

如果你想要设置输出目录(即构建目标文件的目录),你需要在 CMakeLists.txt 文件中进行设置。这通常是通过设置 CMAKE_RUNTIME_OUTPUT_DIRECTORY、CMAKE_LIBRARY_OUTPUT_DIRECTORY 和 CMAKE_ARCHIVE_OUTPUT_DIRECTORY 变量来实现的。

例如,在 CMakeLists.txt 文件中,你可以这样设置输出目录:

cmake
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
然后,在命令行中,你可以指定构建目录(使用 -B 选项),并运行 CMake 以生成构建文件:

bash
mkdir build
cd build
cmake -H…/source -B. # 假设你的 CMakeLists.txt 在 source 目录中
在这个例子中,-H…/source 指定了源代码目录(即包含 CMakeLists.txt 的目录),-B. 指定了构建目录(即当前目录)。然后,CMake 将在当前目录下生成构建文件,并根据 CMakeLists.txt 中的设置将构建目标放置在指定的输出目录中。

请注意,这些设置仅影响 CMake 生成的构建系统文件和目标文件的放置位置。实际的构建过程(即编译和链接)将由你选择的构建工具(如 Make、Ninja 等)来执行。

cmake中…意思

在CMake中,… 是一个常见的路径表示,它代表上一级目录。当你在命令行中使用CMake时,这个符号经常与cmake命令结合使用,来指定源代码目录的位置。

具体来说,当你在命令行中运行cmake命令时,你可能需要告诉CMake你的源代码目录(即包含CMakeLists.txt文件的目录)在哪里。如果你当前已经位于源代码目录的某个子目录中,你可以使用…来引用上一级目录。

例如,假设你有以下目录结构:

project/
CMakeLists.txt
src/
main.cpp
build/
如果你当前位于build目录中,并想要从这个目录运行CMake来配置你的项目,你可以使用以下命令:

bash
cmake …
这里的…表示build目录的上一级目录,即project目录,这是你的源代码目录,其中包含了CMakeLists.txt文件。

所以,cmake …命令告诉CMake去…(即project目录)中寻找CMakeLists.txt文件,并根据该文件中的指令来配置你的项目。然后,CMake会在当前目录(即build目录)中生成构建文件(如Makefile或Visual Studio项目文件)。

camke 生成命令

CMake 本身并不直接生成可执行文件或库,但它用于配置项目并生成构建系统文件(如 Makefile、Ninja 构建文件、Visual Studio 项目文件等)。这些构建系统文件随后由相应的构建工具(如 Make、Ninja、MSBuild 等)用于编译和链接源代码,生成最终的可执行文件或库。

以下是使用 CMake 生成构建系统文件的一般步骤:

编写 CMakeLists.txt 文件:
在你的项目根目录下,创建一个名为 CMakeLists.txt 的文件。这个文件包含了 CMake 用于配置项目的所有指令。
打开命令行或终端:
打开命令行或终端,并导航到你的项目根目录。
运行 CMake:
使用 CMake 命令来配置项目并生成构建系统文件。CMake 的基本语法是:
bash
cmake [选项] <源代码目录>
或者,如果你想要将构建文件生成到一个与源代码目录不同的目录(通常称为“构建目录”或“输出目录”),你可以使用 -B 选项来指定构建目录:

bash
mkdir build # 创建一个名为 build 的目录来存放构建文件
cd build # 切换到 build 目录
cmake … # 配置项目,并在当前目录(build)中生成构建文件
在这个例子中,… 表示上一级目录,即源代码目录。

使用构建工具:
一旦 CMake 完成了配置并生成了构建系统文件,你就可以使用相应的构建工具来编译和链接源代码了。例如,如果你生成了 Makefile,你可以使用 make 命令来构建项目:
bash
make # 在 build 目录中运行,以构建项目
如果你生成了 Visual Studio 项目文件,你可以直接打开这些文件并在 Visual Studio 中构建项目。

指定生成器:
在某些平台上,你可能需要指定 CMake 应该使用哪个构建系统生成器。例如,在 Windows 上,你可以使用 -G 选项来指定使用 Visual Studio 的某个版本:
bash
cmake -G “Visual Studio 16 2019” … # 使用 Visual Studio 2019 生成器
在 Linux 或 macOS 上,你可能不需要指定生成器,因为 CMake 会默认使用 Makefile 或 Ninja。

其他 CMake 选项:
CMake 提供了许多其他选项和标志,用于控制配置过程的各个方面。你可以通过运行 cmake --help 来查看完整的选项列表和说明。
请注意,上述步骤中的命令和选项可能会根据你的具体项目和开发环境而有所不同。务必查阅 CMake 的官方文档以获取最准确和最新的信息。

cmake构建

cmake --build 命令用于构建由 CMake 生成的构建系统。在 CMake 中,你通常会先运行 cmake 命令来配置你的项目并生成构建文件(例如 Makefiles、Ninja 构建文件或 Visual Studio 项目文件),然后你可以使用 cmake --build 来实际构建(编译、链接等)你的项目。

cmake --build 命令的语法大致如下:

bash
cmake --build

[…] [-- […]]

:是包含 CMake 生成的构建文件的目录。这通常是你的构建目录(binary directory 或 out-of-source build directory),但也可以是源目录(source directory),如果你选择了在那里生成构建文件。 :是 cmake --build 命令的选项。例如,你可以使用 --target 选项来指定要构建的特定目标(例如,如果你的项目有多个可执行文件或库)。 [...]:是传递给底层构建工具(如 make、ninja、msbuild 等)的选项。这些选项应该用 -- 分隔,以与 cmake --build 的选项区分开来。 例如,如果你使用 cmake 在名为 build 的目录中生成了 Makefiles,并且你想要构建名为 my_program 的目标,你可以使用以下命令:

bash
cmake --build build --target my_program
如果你只是想要构建默认的目标(通常是 all),你可以省略 --target 选项:

bash
cmake --build build
如果你的项目是为 Visual Studio 生成的,并且你想要使用 Visual Studio 的构建系统来构建它,你可以这样做:

bash
cmake --build build --config Release – /m
在这个例子中,–config Release 指定了要构建的配置(在这种情况下是 Release 配置),而 /m 是传递给 MSBuild 的选项,用于启用多核并行构建。注意 /m 前面有一个 --,用于分隔 cmake --build 的选项和 MSBuild 的选项。

windows 下使用gcc编译 cmake

在 Windows 下使用 GCC 编译器和 CMake 来构建 C 或 C++ 项目,你需要先安装 GCC 编译器(比如 MinGW 或 MinGW-w64)以及 CMake。以下是步骤的概述:

  1. 安装 MinGW 或 MinGW-w64
    你可以从 MinGW 或 MinGW-w64 的官方网站下载并安装它们。MinGW-w64 是 MinGW 的一个分支,提供了对 Windows 64 位平台的支持。
    安装过程中,请确保将 MinGW 的 bin 目录添加到系统的 PATH 环境变量中,以便你可以在命令行中直接调用 GCC 编译器。
  2. 安装 CMake
    你可以从 CMake 的官方网站下载 Windows 安装程序并安装它。
    同样地,确保将 CMake 的 bin 目录添加到系统的 PATH 环境变量中。
  3. 创建 CMakeLists.txt 文件
    在你的项目根目录下创建一个名为 CMakeLists.txt 的文件。这个文件定义了你的项目如何被 CMake 配置和构建。
    在 CMakeLists.txt 文件中,你需要指定编译器、源文件、库依赖等。例如:
    cmake
    cmake_minimum_required(VERSION 3.10)

project(MyProject)

设置 C 标准为 C99(如果需要)

set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)

添加源文件

add_executable(my_program main.c)
4. 使用 CMake 配置项目
打开命令行(例如,CMD、PowerShell 或 Git Bash)。
导航到你的项目目录。
创建一个构建目录(通常是 build),并切换到该目录。
运行 cmake … 命令来配置你的项目。这个命令会读取 CMakeLists.txt 文件,并在当前目录下生成构建文件(例如,Makefiles)。
bash
mkdir build
cd build
cmake …
5. 使用 GCC 编译项目
如果你的 CMakeLists.txt 文件中没有指定生成器(generator),CMake 会根据系统的默认环境选择一个生成器。在 Windows 上,它通常会选择 NMake 或 MSBuild,而不是直接使用 GCC。但是,由于你已经安装了 MinGW,并且 CMake 检测到了它,它可能会使用 MinGW 的 Makefile 生成器。
要使用 GCC 编译项目,你可以运行 cmake --build . 命令。这个命令会调用底层的构建系统(在这种情况下是 MinGW 的 Makefile)来编译你的项目。
bash
cmake --build .
注意事项:
如果你想要明确指定使用 MinGW 的 Makefile 生成器,你可以在配置项目时通过 -G “MinGW Makefiles” 选项来指定它。但是,通常 CMake 会自动检测并使用适当的生成器。
如果你的项目依赖于其他库,并且这些库已经作为 MinGW 包的一部分安装在你的系统中,你需要在 CMakeLists.txt 文件中找到并链接这些库。这通常涉及到使用 find_library() 或 find_package() 命令来查找库,并使用 target_link_libraries() 命令将它们链接到你的目标上。
如果你在编译过程中遇到任何问题,请检查你的 CMakeLists.txt 文件是否正确配置了你的项目,并确保所有依赖项都已正确安装和配置。

安装gcc

教程链接

windows 下使用gcc编译 cmake

在 Windows 下使用 GCC 编译器和 CMake 来构建 C 或 C++ 项目,你需要先安装 GCC 编译器(比如 MinGW 或 MinGW-w64)以及 CMake。以下是步骤的概述:

  1. 安装 MinGW 或 MinGW-w64
    你可以从 MinGW 或 MinGW-w64 的官方网站下载并安装它们。MinGW-w64 是 MinGW 的一个分支,提供了对 Windows 64 位平台的支持。
    安装过程中,请确保将 MinGW 的 bin 目录添加到系统的 PATH 环境变量中,以便你可以在命令行中直接调用 GCC 编译器。
  2. 安装 CMake
    你可以从 CMake 的官方网站下载 Windows 安装程序并安装它。
    同样地,确保将 CMake 的 bin 目录添加到系统的 PATH 环境变量中。
  3. 创建 CMakeLists.txt 文件
    在你的项目根目录下创建一个名为 CMakeLists.txt 的文件。这个文件定义了你的项目如何被 CMake 配置和构建。
    在 CMakeLists.txt 文件中,你需要指定编译器、源文件、库依赖等。例如:
    cmake
    cmake_minimum_required(VERSION 3.10)

project(MyProject)

设置 C 标准为 C99(如果需要)

set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)

添加源文件

add_executable(my_program main.c)
4. 使用 CMake 配置项目
打开命令行(例如,CMD、PowerShell 或 Git Bash)。
导航到你的项目目录。
创建一个构建目录(通常是 build),并切换到该目录。
运行 cmake … 命令来配置你的项目。这个命令会读取 CMakeLists.txt 文件,并在当前目录下生成构建文件(例如,Makefiles)。
bash
mkdir build
cd build
cmake …
5. 使用 GCC 编译项目
如果你的 CMakeLists.txt 文件中没有指定生成器(generator),CMake 会根据系统的默认环境选择一个生成器。在 Windows 上,它通常会选择 NMake 或 MSBuild,而不是直接使用 GCC。但是,由于你已经安装了 MinGW,并且 CMake 检测到了它,它可能会使用 MinGW 的 Makefile 生成器。
要使用 GCC 编译项目,你可以运行 cmake --build . 命令。这个命令会调用底层的构建系统(在这种情况下是 MinGW 的 Makefile)来编译你的项目。
bash
cmake --build .
注意事项:
如果你想要明确指定使用 MinGW 的 Makefile 生成器,你可以在配置项目时通过 -G “MinGW Makefiles” 选项来指定它。但是,通常 CMake 会自动检测并使用适当的生成器。
如果你的项目依赖于其他库,并且这些库已经作为 MinGW 包的一部分安装在你的系统中,你需要在 CMakeLists.txt 文件中找到并链接这些库。这通常涉及到使用 find_library() 或 find_package() 命令来查找库,并使用 target_link_libraries() 命令将它们链接到你的目标上。
如果你在编译过程中遇到任何问题,请检查你的 CMakeLists.txt 文件是否正确配置了你的项目,并确保所有依赖项都已正确安装和配置。

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

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

相关文章

iptables(12)实际应用举例:策略路由、iptables转发、TPROXY

简介 前面的文章中我们已经介绍过iptables的基本原理,表、链的基本操作,匹配条件、扩展模块、自定义链以及网络防火墙、NAT等基本配置及原理。 这篇文章将以实际应用出发,列举一个iptables的综合配置使用案例,将我们前面所涉及到的功能集合起来,形成一个完整的配置范例。…

SpringMVC的架构有什么优势?——控制器(一)

文章目录 控制器(Controller)1. 控制器(Controller)&#xff1a;2. 请求映射(Request Mapping)&#xff1a;3. 参数绑定(Request Parameters Binding)&#xff1a;4. 视图解析器(View Resolver)&#xff1a;5. 数据绑定(Data Binding)&#xff1a;6. 表单验证(Form Validation)…

TAPD项目管理软件无法与企业微信进行关联

TAPD一段时间未使用后&#xff0c;需要重新启动&#xff0c;此时会出现你的企业微信尚未与TAPD账号关联的提示 解决方案&#xff1a;找到TAPD应用&#xff0c;先删除应用&#xff0c;然后再解除禁用即可

树洞陪聊陪玩交友程序系统源码,解锁交友新体验

在繁忙的都市生活中&#xff0c;你是否渴望找到一片属于自己的秘密花园&#xff0c;倾诉心声、分享快乐&#xff1f;今天&#xff0c;就让我带你走进这片名为“树洞”的神秘之地&#xff0c;感受陪聊陪玩交友的全新魅力&#xff01; &#x1f333;树洞陪聊陪玩交友程序系统 你…

DC/AC电源模块:为智能家居设备提供恒定的电力供应

BOSHIDA DC/AC电源模块&#xff1a;为智能家居设备提供恒定的电力供应 DC/AC电源模块是一种常见的电源转换器&#xff0c;它将直流电源&#xff08;DC&#xff09;转换为交流电源&#xff08;AC&#xff09;&#xff0c;为智能家居设备提供恒定的电力供应。在智能家居系统中&a…

【React】portal

createPortal 允许你将 JSX 作为 children 渲染至 DOM 的不同部分。 createPortal(children, domNode, key?) 使用 portal 渲染模态对话框 import NoPortalExample from "./components/NoPortalExample"; import PortalExample from "./components/PortalEx…

JVM(11):虚拟机性能分析和故障解决工具之jstack工具

1 jstack(Stack Trace forJava)作用 查看或导出 Java 应用程序中线程堆栈信息 。 线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合&#xff0c;生成线程快照的主要目的是定位线程出现长时间停顿的原因&#xff0c;如线程间死锁、死循环、长时间等待外部资源等…

案例:MySQL主从复制与读写分离

一、案例分析 1.案例概述 在实际的生产环境中&#xff0c;如果对数据库的读和写都在同一个数据库服务器中操作,无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此&#xff0c;一般来说都是通过主从复制(Master-Slave)来同步数据&#xff0c;再通…

uniapp + vite中 uni.scss 使用 /deep/ 不生效(踩坑记录三)

vite 中使用 /deep/ 进行样式穿透报错 原因&#xff1a;vite 中不支持&#xff0c;换成 ::v-deep 或:deep即可

浅谈人工智能发展趋势

第三次浪潮 人类科技发展的主线正沿着“能源”和“新型”展开。AI的尽头是光伏和储能。 如今我们正在经历第三次浪潮——信息文明。 社会生产力 劳动对象 劳动工具 劳动者 生产要素 农业文明铜器铁器 材料 人力工具 农民 土地人力 工业文明机车电力 材料动力 动力…

Java web应用性能分析之【prometheus监控K8s指标说明】

常规k8s的监控指标 单独 1、集群维度 集群状态集群节点数节点状态&#xff08;正常、不可达、未知&#xff09;节点的资源使用率&#xff08;CPU、内存、IO等&#xff09; 2、应用维度 应用响应时间 应用的错误率 应用的请求量 3、系统和集群组件维度 API服务器状态控…

2024 vue3入门教程:01vscode终端命令创建第一个vue项目

参考vue官网手册&#xff1a;https://cn.vuejs.org/guide/quick-start.html 一、找个盘符&#xff0c;新建文件夹存储以后得vue项目 我的是e盘下创建了vueproject 二、使用vscode打开存储vue项目的文件夹 因为我生成过项目&#xff0c;所以有文件&#xff0c;你们初次是没有…

IT专业入门,高考假期预习指南

文章目录 一、了解IT专业的基本概念二、选择适合的编程语言入门三、掌握基本的编程工具和环境四、学习基础的数据结构和算法五、实践项目和动手实验六、利用在线资源进行学习七、参加编程竞赛和社区活动总结 高考结束后&#xff0c;许多同学将迎来大学生活&#xff0c;而对于选…

DataWhaleAI Tsak1 运行Baseline

题目背景 在当今数字化时代&#xff0c;企业积累了丰富的对话数据&#xff0c;这些数据不仅是客户与企业之间交流的记录&#xff0c;更是隐藏着宝贵信息的宝库。在这个背景下&#xff0c;群聊对话分角色要素提取成为了企业营销和服务的一项重要策略。 群聊对话分角色要素提取…

nlp--最大匹配分词(计算召回率)

最大匹配算法是一种常见的中文分词算法&#xff0c;其核心思想是从左向右取词&#xff0c;以词典中最长的词为优先匹配。这里我将为你展示一个简单的最大匹配分词算法的实现&#xff0c;并结合输入任意句子、显示分词结果以及计算分词召回率。 代码 : # happy coding…

Tektronix泰克 AWG70001A 任意波形发生器

Tektronix泰克 AWG70001A 任意波形发生器 AWG70000A 系列任意波形发生器 (AWG) 在采样率、信号保真度和波形内存方面代表着尖端水平&#xff0c;特别适合复杂器件、系统和实验的设计、测试和操作。由于高达 50 GS/s 采样率和 10 位垂直分辨率&#xff0c;它提供了优秀的信号激…

【Python】入门Python,你必须了解这些事

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️Python】 文章目录 前言一、认识Python什么是Python&#xff1f;!Python的起源Python的特点简洁易读跨平台&#xff0c;可移植拥有强大的库和框架面向对象 Python的优缺点优点缺点 Python的应用环境扩…

linux ls文件排序

linux可以使用ls命令结合一些选项来按照文件大小对文件和目录进行排序。以下是一些常用的方法&#xff1a; 1、这里&#xff0c;-l 选项表示长格式输出&#xff08;包括文件权限、所有者、大小等&#xff09;&#xff0c;-S 选项表示按照文件大小排序&#xff0c;-h 选项表示以…

PHP留守儿童关爱之家网站-计算机毕业设计源码11079

目录 1 绪论 1.1 研究背景 1.2研究意义 1.3 论文结构与章节安排 2 留守儿童关爱之家网站系统分析 2.1 可行性分析 2.2 系统功能分析 2.3 系统用例分析 2.4 系统流程和逻辑 2.5本章小结 3 留守儿童关爱之家网站总体设计 3.1系统结构设计 3.2系统功能模块设计 3.2 数…

【算法训练记录——Day38】

Day38——动态规划Ⅰ 1.理论#2.leetcode_509斐波那契数3.leetcode_70爬楼梯4.kamacoder_57爬楼梯5.leetcode_746使用最小花费爬楼梯 1.理论 一般解题步骤&#xff1a; 确定dp数组及下标含义确定递推公式数组如何初始化确定递归顺序举例推导dp数组 #2.leetcode_509斐波那契数…