8.cmake常用命令

2023-11-13

前面我们讲到了 cmake 常用的变量,相信“cmake 即编程”的感觉会越来越明显,无论如何,
我们仍然可以看到 cmake 比 autotools 要简单很多。接下来我们就要集中的看一看
cmake 所提供的常用指令。在前面的章节我们已经讨论了很多指令的用法,如
PROJECT,ADD_EXECUTABLE,INSTALL,ADD_SUBDIRECTORY,SUBDIRS,INCLUDE
_DIRECTORIES,LINK_DIRECTORIES,TARGET_LINK_LIBRARIES,SET 等。

本节会引入更多的 cmake 指令,为了编写的方便,我们将按照 cmake man page 的顺序
来介绍各种指令,不再推荐使用的指令将不再介绍,INSTALL 系列指令在安装部分已经做
了非常详细的说明,本节也不在提及。

一 基本命令

1,ADD_DEFINITIONS
向 C/C++编译器添加-D 定义,比如:
ADD_DEFINITIONS(-DENABLE_DEBUG -DABC),参数之间用空格分割。
如果你的代码中定义了#ifdef ENABLE_DEBUG #endif,这个代码块就会生效。
如果要添加其他的编译器开关,可以通过 CMAKE_C_FLAGS 变量和 CMAKE_CXX_FLAGS 变量设置。
我们定义CMakeList如下:

cmake_minimum_required(VERSION 3.0.0)
project(t6)
 
set(SRC_LIST main.c)
ADD_DEFINITIONS(-DENABLE_DEBUG)
add_executable(hello ${SRC_LIST})

main.c如下:

#include <stdio.h>
int main()
{
    printf("main start!\n");
#ifdef ENABLE_DEBUG
    printf("ENABLE_DEBUG is define!\n");
#endif
    printf("main end!\n");

    return 0;
}

结果如下: 从结果看出 ENABLE_DEBUG is define!打印出来

root@BIH-L-55661:/mnt/d/study/lwstudy/cmake/t6/build# cmake ..
-- The C compiler identification is GNU 9.4.0
-- The CXX compiler identification is GNU 9.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /mnt/d/study/lwstudy/cmake/t6/build
root@BIH-L-55661:/mnt/d/study/lwstudy/cmake/t6/build# make
Scanning dependencies of target hello
[ 50%] Building C object CMakeFiles/hello.dir/main.c.o
[100%] Linking C executable hello
[100%] Built target hello
root@BIH-L-55661:/mnt/d/study/lwstudy/cmake/t6/build# ./hello
main start!
ENABLE_DEBUG is define!
main end!
root@BIH-L-55661:/mnt/d/study/lwstudy/cmake/t6/build#

2,ADD_DEPENDENCIES
定义 target 依赖的其他 target,确保在编译本 target 之前,其他的 target 已经被构建。

ADD_DEPENDENCIES(target-name depend-target1
                depend-target2 ...)

3,ADD_EXECUTABLE、ADD_LIBRARY、ADD_SUBDIRECTORY 前面已经介绍过了,这里不再罗唆。
4,ADD_TEST 与 ENABLE_TESTING 指令。
ENABLE_TESTING 指令用来控制 Makefile 是否构建 test 目标,涉及工程所有目录。语法很简单,没有任何参数,ENABLE_TESTING(),一般情况这个指令放在工程的主CMakeLists.txt 中.
ADD_TEST 指令的语法是:

ADD_TEST(testname Exename arg1 arg2 ...)

testname 是自定义的 test 名称,Exename 可以是构建的目标文件也可以是外部脚本等等。后面连接传递给可执行文件的参数。如果没有在同一个 CMakeLists.txt 中打开ENABLE_TESTING()指令,任何 ADD_TEST 都是无效的。

5,AUX_SOURCE_DIRECTORY
基本语法是:

AUX_SOURCE_DIRECTORY(dir VARIABLE)

作用是发现一个目录下所有的源代码文件并将列表存储在一个变量中,这个指令临时被用来
自动构建源文件列表。因为目前 cmake 还不能自动发现新添加的源文件。
比如

AUX_SOURCE_DIRECTORY(. SRC_LIST)
ADD_EXECUTABLE(main ${SRC_LIST})

6,CMAKE_MINIMUM_REQUIRED
其语法为 CMAKE_MINIMUM_REQUIRED(VERSION versionNumber [FATAL_ERROR])
比如 CMAKE_MINIMUM_REQUIRED(VERSION 2.5 FATAL_ERROR)
如果 cmake 版本小与 2.5,则出现严重错误,整个过程中止。

7,EXEC_PROGRAM
在 CMakeLists.txt 处理过程中执行命令,并不会在生成的 Makefile 中执行。具体语法为:

EXEC_PROGRAM(Executable [directory in which to run]
            [ARGS <arguments to executable>]
            [OUTPUT_VARIABLE <var>]
            [RETURN_VALUE <var>])

用于在指定的目录运行某个程序,通过 ARGS 添加参数,如果要获取输出和返回值,可通过OUTPUT_VARIABLE 和 RETURN_VALUE 分别定义两个变量

这个指令可以帮助你在 CMakeLists.txt 处理过程中支持任何命令,比如根据系统情况去修改代码文件等等。
举个简单的例子,我们要在 src 目录执行 ls 命令,并把结果和返回值存下来。

可以直接在 src/CMakeLists.txt 中添加:

EXEC_PROGRAM(ls ${PROJECT_SOURCE_DIR} ARGS "*.c" OUTPUT_VARIABLE LS_OUTPUT RETURN_VALUE LS_RVALUE)
MESSAGE(STATUS "LS_RVALUE: " ${LS_RVALUE})
IF(NOT LS_RVALUE)
MESSAGE(STATUS "ls result: " ${LS_OUTPUT})
ENDIF(NOT LS_RVALUE)

在 cmake 生成 Makefile 的过程中,就会执行 ls 命令,如果返回 0,则说明成功执行,那么就输出 ls *.c 的结果。
执行结果:

root@BIH-L-55661:/mnt/d/study/lwstudy/cmake/t6/build# cmake ..
PROJECT_BINARY_DIR==/mnt/d/study/lwstudy/cmake/t6/build
-- LS_RVALUE: 0
-- ls result: main.c
-- Configuring done
-- Generating done
-- Build files have been written to: /mnt/d/study/lwstudy/cmake/t6/build
root@BIH-L-55661:/mnt/d/study/lwstudy/cmake/t6/build#

8,FILE 指令
文件操作指令,基本语法为:

FILE(WRITE filename "message to write"... )
FILE(APPEND filename "message to write"... )
FILE(READ filename variable)
FILE(GLOB variable [RELATIVE path] [globbing expressions]...)
FILE(GLOB_RECURSE variable [RELATIVE path] [globbing expressions]...)
FILE(REMOVE [directory]...)
FILE(REMOVE_RECURSE [directory]...)
FILE(MAKE_DIRECTORY [directory]...)
FILE(RELATIVE_PATH variable directory file)
FILE(TO_CMAKE_PATH path result)
FILE(TO_NATIVE_PATH path result)

9,INCLUDE 指令
用来载入 CMakeLists.txt 文件,也用于载入预定义的 cmake 模块

INCLUDE(file1 \[OPTIONAL])
INCLUDE(module \[OPTIONAL])

OPTIONAL 参数的作用是文件不存在也不会产生错误。
你可以指定载入一个文件,如果定义的是一个模块,那么将在 CMAKE_MODULE_PATH 中搜索这个模块并载入。

载入的内容将在处理到 INCLUDE 语句是直接执行。

二,INSTALL 指令

三,FIND_指令

FIND_系列指令主要包含一下指令:

VAR 变量代表找到的文件全路径,包含文件名

FIND_FILE(<VAR> name1 path1 path2 ...)

VAR 变量表示找到的库全路径,包含库文件名

FIND_LIBRARY(<VAR> name1 path1 path2 ...)

VAR 变量代表包含这个文件的路径。

FIND_PATH(<VAR> name1 path1 path2 ...)

VAR 变量代表包含这个程序的全路径。

FIND_PROGRAM(<VAR> name1 path1 path2 ...)



FIND_PACKAGE(<name> [major.minor] [QUIET] [NO_MODULE]
            [[REQUIRED|COMPONENTS] [componets...]])

用来调用预定义在 CMAKE_MODULE_PATH 下的 Find<name>.cmake 模块,你也可以自己定义 Find<name>模块,通过 SET(CMAKE_MODULE_PATH dir)将其放入工程的某个目录中供工程使用,我们在后面的章节会详细介绍 FIND_PACKAGE 的使用方法和 Find 模块的编写。

FIND_LIBRARY 示例:

FIND_LIBRARY(libX X11 /usr/lib)
IF(NOT libX)
MESSAGE(FATAL_ERROR “libX not found”)
ENDIF(NOT libX)

四,控制指令

1,IF 指令,基本语法为

IF(expression)
    # THEN section.
    COMMAND1(ARGS ...)COMMAND2(ARGS ...)
    ...
ELSE(expression)
    # ELSE section.
    COMMAND1(ARGS ...)
    COMMAND2(ARGS ...)
    ...
ENDIF(expression)

另外一个指令是 ELSEIF,总体把握一个原则,凡是出现 IF 的地方一定要有对应的ENDIF.出现 ELSEIF 的地方,ENDIF 是可选的。

表达式的使用方法如下:

IF(var),如果变量不是:空,0,N, NO, OFF, FALSE, NOTFOUND 或\<var>\_NOTFOUND 时,表达式为真。
IF(NOT var ),与上述条件相反。
IF(var1 AND var2),当两个变量都为真是为真。
IF(var1 OR var2),当两个变量其中一个为真时为真。
IF(COMMAND cmd),当给定的 cmd 确实是命令并可以调用是为真。
IF(EXISTS dir)或者 IF(EXISTS file),当目录名或者文件名存在时为真。
IF(file1 IS\_NEWER\_THAN file2),当 file1 比 file2 新,或者 file1/file2 其
中有一个不存在时为真,文件名请使用完整路径。
IF(IS\_DIRECTORY dirname),当 dirname 是目录时,为真。
IF(variable MATCHES regex)
IF(string MATCHES regex)

当给定的变量或者字符串能够匹配正则表达式 regex 时为真。比如:

IF("hello" MATCHES "ell")
MESSAGE("true")
ENDIF("hello" MATCHES "ell")
IF(variable LESS number)
IF(string LESS number)
IF(variable GREATER number)
IF(string GREATER number)
IF(variable EQUAL number)
IF(string EQUAL number)

数字比较表达式

IF(variable STRLESS string)
IF(string STRLESS string)
IF(variable STRGREATER string)
IF(string STRGREATER string)
IF(variable STREQUAL string)
IF(string STREQUAL string)

按照字母序的排列进行比较.

IF(DEFINED variable),如果变量被定义,为真。

一个小例子,用来判断平台差异:

IF(WIN32)
    MESSAGE(STATUS “This is windows.”)
    #作一些 Windows 相关的操作
ELSE(WIN32)
    MESSAGE(STATUS “This is not windows”)
    #作一些非 Windows 相关的操作
ENDIF(WIN32)

上述代码用来控制在不同的平台进行不同的控制,但是,阅读起来却并不是那么舒服,
ELSE(WIN32)之类的语句很容易引起歧义。

这就用到了我们在“常用变量”一节提到的 CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS 开关。
可以 SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)

可以 SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
这时候就可以写成:

IF(WIN32)
ELSE()
ENDIF()

如果配合 ELSEIF 使用,可能的写法是这样

IF(WIN32)
#do something related to WIN32
ELSEIF(UNIX)
#do something related to UNIX
ELSEIF(APPLE)
#do something related to APPLE
ENDIF(WIN32)

2,WHILE

WHILE 指令的语法是:

WHILE(condition)
    COMMAND1(ARGS ...)
    COMMAND2(ARGS ...)
    ...
ENDWHILE(condition)

其真假判断条件可以参考 IF 指令。

3,FOREACH

FOREACH 指令的使用方法有三种形式:

1,列表

FOREACH(loop_var arg1 arg2 ...)
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
ENDFOREACH(loop_var)

像我们前面使用的 AUX_SOURCE_DIRECTORY 的例子

AUX_SOURCE_DIRECTORY(. SRC_LIST)
FOREACH(F ${SRC_LIST})
MESSAGE(${F})
ENDFOREACH(F)

2,范围

FOREACH(loop_var RANGE total)
ENDFOREACH(loop_var)

从 0 到 total 以1为步进
举例如下:

FOREACH(VAR RANGE 10)
MESSAGE(${VAR})
ENDFOREACH(VAR)

最终得到的输出是:
0
1
2
3
4
5
6
7
8
9
10

3,范围和步进

FOREACH(loop_var RANGE start stop [step])
ENDFOREACH(loop_var)

从 start 开始到 stop 结束,以 step 为步进,
举例如下

FOREACH(A RANGE 5 15 3)
MESSAGE(${A})
ENDFOREACH(A)

最终得到的结果是:
5
8
11
14
这个指令需要注意的是,知道遇到 ENDFOREACH 指令,整个语句块才会得到真正的执行

小结:

本小节基本涵盖了常用的 cmake 指令,包括基本指令、查找指令、安装指令以及控制语句等,特别需要注意的是,在控制语句条件中使用变量,不能用${}引用,而是直接应用变量名。掌握了以上的各种控制指令,你应该完全可以通过 cmake 管理复杂的程序了,下一节,我们将介绍一个比较复杂的例子,通过他来演示本章的一些指令,并介绍模块的概念。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

8.cmake常用命令 的相关文章

  • Tensorflow 中的自定义资源

    由于某些原因 我需要为 Tensorflow 实现自定义资源 我试图从查找表实现中获得灵感 如果我理解得好的话 我需要实现3个TF操作 创建我的资源 资源的初始化 例如 在查找表的情况下填充哈希表 执行查找 查找 查询步骤 为了促进实施 我
  • MEX 文件中的断言导致 Matlab 崩溃

    我正在使用mxAssert 宏定义为matrix h在我的 C 代码中 mex 可以完美编译 当我调用的 mex 代码中违反断言时 该断言不会导致我的程序崩溃 而是导致 Matlab 本身崩溃 我错过了什么吗 这是有意的行为吗 当我查看 M
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 如果.Net Core可以在Windows上运行,为什么不能在.Net Framework中引用.Net Core DLL?

    我明白为什么 Net Framework 可能会在 Net Core IE 中导致问题 因为不存在特定于 Windows 平台的 API 但是为什么不能直接引用 Net Core 作为 Net Framework 中的库呢 如果 Net C
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • 在 C# 中将位从 ulong 复制到 long

    所以看来 NET 性能计数器类型 http msdn microsoft com en us library system diagnostics performancecounter aspx有一个恼人的问题 它暴露了long对于计数器
  • 是否有与 C++11 emplace/emplace_back 函数类似的 C# 函数?

    从 C 11 开始 可以写类似的东西 include
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • 为什么 FTPWebRequest 或 WebRequest 通常不接受 /../ 路径?

    我正在尝试从 ftp Web 服务器自动执行一些上传 下载任务 当我通过客户端甚至通过 Firefox 连接到服务器时 为了访问我的目录 我必须指定如下路径 ftp ftpserver com AB00000 incoming files
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • 组合框项目为空但数据源已满

    将列表绑定到组合框后 其 dataSource Count 为 5 但组合框项目计数为 0 怎么会这样 我习惯了 Web 编程 而且这是在 Windows 窗体中进行的 所以不行combo DataBind 方法存在 这里的问题是 我试图以
  • 通过等待任务或访问其 Exception 属性都没有观察到任务的异常

    这些是我的任务 我应该如何修改它们以防止出现此错误 我检查了其他类似的线程 但我正在使用等待并继续 那么这个错误是怎么发生的呢 通过等待任务或访问其 Exception 属性都没有观察到任务的异常 结果 未观察到的异常被终结器线程重新抛出
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 如何查明CONFIG_FANOTIFY_ACCESS_PERMISSIONS是否启用?

    我想利用fanotify 7 http man7 org linux man pages man7 fanotify 7 html我遇到的问题是在某些内核上CONFIG FANOTIFY ACCESS PERMISSIONS不起作用 虽然C
  • 为什么 Ajax.BeginForm 在 Chrome 中不起作用?

    我正在使用 c NET MVC2 并尝试创建一个 ajax 表单来调用删除数据库记录 RemoveRelation 的方法 删除记录的过程正在按预期进行 删除记录后 表单应调用一个 JavaScript 函数 从视觉效果中删除该记录 Rem
  • 以编程方式使用自定义元素创建网格

    我正在尝试以编程方式创建一个网格 并将自定义控件作为子项附加到网格中 作为 2x2 矩阵中的第 0 行第 0 列 为了让事情变得更棘手 我使用了 MVVM 设计模式 下面是一些代码可以帮助大家理解这个想法 应用程序 xaml cs base
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • Swagger 为 ASP.CORE 3 中的字典生成错误的 URL

    当从查询字符串中提取的模型将字典作为其属性之一时 Swagger 会生成不正确的 URL 如何告诉 Swagger 更改 URL 中字典的格式或手动定义输入参数模式而不自动生成 尝试使用 Swashbuckle 和 NSwag 控制器 pu
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens

随机推荐

  • 解决Xshell显示中文乱码的问题

    执行echo LANG命令输出的是当前的编码方式 执行locale命令得到系统中所有可用的编码方式 要让Xshell不显示乱码 则要将编码方式改为UTF 8 在Xshell中 file gt open gt 在打开的session中选择连接
  • Python习题练习1--变量赋值交换

    题目 已知a的值是1 b的值是2 如何交换a b的值 打印a的值为2 b的值为1 这时候我们就可以思考了 是不是可以直接交换呢 在python中特有这种写法 可以看下下面解法 a 1 定义a的值为1 b 2 定义b的值为2 a b b a
  • SVM算法的参数

    1 c float参数 默认值为1 0 错误项的惩罚系数 c越大 即对分错样本的惩罚程度越大 因此在训练样本中准确率越高 但是泛化能力降低 也就是对测试数据的分类准确率降低 相反 减小c的话 允许训练样本中有一些误分类错误样本 泛化能力强
  • Linux嵌入式学习---C语言之赋值

    Linux嵌入式学习 C语言之赋值 一 语句的作用和分类 1 常见的9种控制语句 2 函数调用语句 3 表达式语句 4 空语句 5 复合语句 二 赋值语句 1 赋值运算符 2 复合的赋值运算符 3 变量赋初值 一 语句的作用和分类 1 常见
  • 彩光和灰光模块_Y5T265 【5G光模块】一个基站前传到底是用6个还是12个,或者是24模块...

    Y5T264 5G光模块 模式分配噪声 接着昨天继续分析5G前传光模块白皮书 问题1 在白皮书的第三页 前传光模块的需求 有不同的传输距离 这个我们能理解 有需要灰光或者彩光的 我们也能理解 但我们不能理解的是为什么前传模块的速率有10G
  • signature今日头条php实现,今日头条_signature 分析

    某天群友问了一句头条翻页算法 然后随手把算法摘出来 现在分享出来 window TAC console log userInfo id a t navigator window navigator userAgent function as
  • Deep Spatio-Temporal Residual Networks(深度时空残差神经网络)

    目录 业务场景 环境搭建 数据及目录结构 模型 代码 建模 训练 预测及结果呈现 文章只是对模型的学习与实践做简要记录 以免日后给忘了 并没有对模型优劣 应用的场景等理论方面有过多分析 适合快速动手搭建 成功运行 分析代码 并学习怎样用ke
  • sql查询字段重复的数据 并且修改数据某个字段

    1 sql查询字段重复的数据 并且修改所有行某个字段值 UPDATE 表名 a SET a 要修改的字段名 1 WHERE a 重复字段 IN SELECT b 重复字段 FROM SELECT c 重复字段 FROM 表名 c GROUP
  • 5天玩转MySQL:数据库概念、SQL介绍、数据库和数据表基本操作、字符表

    数据库概念 数据库 Database 是按照数据结构来组织 存储和管理数据的建立在计算机存储设备上的仓库 数据库 存储数据的仓库 数据库分类 网络数据库 网络数据库是指把数据库技术引入到计算机网络系统中 借助于网络技术将存储于数据库中的大量
  • Eclipse导入外部工程运行报错:The selection cannot be run on any server

    一 错误描述 课下复习时导入老师的Demo 发现项目报错 在项目上有红色叉 运行时报如下错误 二 解决步骤 1 在项目上右键 gt Properties 2 打开Java Build Path 发现JDK和Tomcat都未绑定 这是原先项目
  • vue左侧悬浮_vue实现移动端悬浮窗效果

    本文讲述 在使用VUE的移动端实现类似于iPhone的悬浮窗的效果 相关知识点 touchstart当在屏幕上按下手指时触发 touchmove 当在屏幕上移动手指时触发 touchend 当在屏幕上抬起手指时触发 mousedown mo
  • UE4的SpawnActor问题

    1 SpawnActor传参 做项目过程中发现先SpawnActor再传参会先运行 生成的Actor的BeginPlay然后才进行传参 可是我在BeginPlay时就需要用到参数做操作了 发生情况时代码如下 if BaseCharactor
  • 9.21 小米一面面经

    介绍项目经历 测试时用的方式 在公司学到了哪些 有什么积累 将来想发展的方向 手工测试 测试开发 上学时的专业课 手机测试部 通信系统部 和通信关联性比较大 通信协议相关测试 跟手机芯片相关 2G3G4G5G网络 在研产品测试 国际运营商的
  • 计操理论课08 -- openEuler实验第七章文件系统

    文章目录 任务1 为 Ext4 文件系统添加扩展属性 25min 任务描述 任务过程及截图 任务2 注册一个自定义的文件系统类型 15min 任务描述 任务代码 任务截图 任务3 在 proc下创建目录 20min 任务描述 任务代码 任务
  • (LeetCode C++)移动零

    给定一个数组 nums 编写一个函数将所有 0 移动到数组的末尾 同时保持非零元素的相对顺序 请注意 必须在不复制数组的情况下原地对数组进行操作 示例1 输入 nums 0 1 0 3 12 输出 1 3 12 0 0 示例2 输入 num
  • 25道Python练手题(附详细答案),赶紧收藏!python入门

    题目 1 水仙花数 水仙花数 Narcissistic number 也被称为超完全数字不变数 pluperfect digital invariant PPDI 自恋数 自幂数 阿姆斯壮数或阿姆斯特朗数 Armstrong number
  • 启动jar包报错: 找不到或无法加载主类

  • C++ 删除文件夹下所有内容

    介绍一种删除文件夹下所有内容的实现方式 包括删除该文件夹 注 该文件夹下面 无论嵌套多少层文件夹或文件数据 都可以删掉 直接上代码 Tip 以 方式查找所有类型文件 do while方式进行循环遍历 直到满足终止条件 删除文件夹及内容 in
  • web前端开发语言介绍

    web前端开发语言主要包含 html语言 css样式代码 javascript脚本 html5 css3 jQuery ajax Bootstrap Backbone 1 html语言 网页的基本标记语言 也是最基础的语言 掌握起来比较简单
  • 8.cmake常用命令

    前面我们讲到了 cmake 常用的变量 相信 cmake 即编程 的感觉会越来越明显 无论如何 我们仍然可以看到 cmake 比 autotools 要简单很多 接下来我们就要集中的看一看 cmake 所提供的常用指令 在前面的章节我们已经