cmake 之 CMakeLists.txt 中的函数是从哪里来的

我们都知道,cmake会解释执行 CMakeLists.txt 以及其他 *.cmake 脚本,

这里先给出一个“先验” 的知识点:

任何一个独立脚本或脚本函数命令的执行,都是通过 CPP 函数 RunListFile(...) 调用的

void cmMakefile::RunListFile(cmListFile const& listFile,std::string const& filenametoread,DeferCommands* defer);

所以可以debug 版本 cmake 中,在这里打断点。

0,从简单应用示例开始

在Linux 中,

源代码: main.c

#include <stdio.h>
int main()
{printf("Hello World from Main!\n");return 0;
}

CMakeLists.txt 如下:

PROJECT(HELLO)
SET(SRC_LIST main.c)
MESSAGE(STATUS "src =" ${SRC_LIST})
MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir " ${HELLO_SOURCE_DIR})
ADD_EXECUTABLE(hello ${SRC_LIST})

配置,编译,运行:

mkdir build
cd build
cmake ..
make
./hello

效果图:

1,cmake 内置关键控制字和命令

使用 CPP 代码定义了其功能

比如,如下这些函数是哪里来的:

PROJECT(...)
SET(...)
MESSAGE(...)

         如上这些是 cmake 的内置函数命令,定义在CPP文件: 

cmake-3.29.2/Source/cmCommands.cxx 

该文件内容放在文末供参考。 

源代码文件中存在如下两个定义函数,定义了一大批 CMakeLists.txt 中可以使用的关键字和内置函数命令:

void GetScriptingCommands(cmState* state)
{state->AddFlowControlCommand("break", cmBreakCommand);state->AddFlowControlCommand("continue", cmContinueCommand);state->AddFlowControlCommand("foreach", cmForEachCommand);state->AddFlowControlCommand("function", cmFunctionCommand);state->AddFlowControlCommand("if", cmIfCommand);state->AddFlowControlCommand("macro", cmMacroCommand);state->AddFlowControlCommand("return", cmReturnCommand);state->AddFlowControlCommand("while", cmWhileCommand);state->AddFlowControlCommand("block", cmBlockCommand);state->AddBuiltinCommand("cmake_language", cmCMakeLanguageCommand);state->AddBuiltinCommand("cmake_minimum_required", cmCMakeMinimumRequired);state->AddBuiltinCommand("cmake_path", cmCMakePathCommand);...


void GetProjectCommands(cmState* state)
{state->AddBuiltinCommand("add_compile_definitions",cmAddCompileDefinitionsCommand);state->AddBuiltinCommand("add_custom_command", cmAddCustomCommandCommand);state->AddBuiltinCommand("add_custom_target", cmAddCustomTargetCommand);state->AddBuiltinCommand("add_definitions", cmAddDefinitionsCommand);state->AddBuiltinCommand("add_dependencies", cmAddDependenciesCommand);state->AddBuiltinCommand("add_executable", cmAddExecutableCommand);state->AddBuiltinCommand("add_library", cmAddLibraryCommand);state->AddBuiltinCommand("add_subdirectory", cmAddSubDirectoryCommand);state->AddBuiltinCommand("add_test", cmAddTestCommand);state->AddBuiltinCommand("build_command", cmBuildCommand);state->AddBuiltinCommand("create_test_sourcelist", cmCreateTestSourceList);state->AddBuiltinCommand("define_property", cmDefinePropertyCommand);state->AddBuiltinCommand("enable_language", cmEnableLanguageCommand);state->AddBuiltinCommand("enable_testing", cmEnableTestingCommand);...

2,用户自定义 函数命令 function

除了这些之外,其余的就是用户按照脚本语法自己定义的函数。

类似 MLIR 项目中,在 LLVM - MLIR 的编译产物中,提供了一个函数 mlir_tablegen(),于文件:

local/llvm/lib/cmake/mlir/AddMLIR.cmake

其用户自定义方式如下:

从函数名可以看出,用户自定义函数命令的关键字为 function( new_COMMAND_NAME, parameters)

3,使用macro 定义的脚本命令

除了这两类,还有一部分想 check_language()这样的命令,也是cmake 官方定义的,于如下文件中:./cmake-3.29.2/Modules/CheckLanguage.cmake

4,cmCommands.cxx 内容

/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanyingfile Copyright.txt or https://cmake.org/licensing for details.  */#include "cmCommands.h"#include <cm/memory>#include "cmAddCompileDefinitionsCommand.h"
#include "cmAddCustomCommandCommand.h"
#include "cmAddCustomTargetCommand.h"
#include "cmAddDefinitionsCommand.h"
#include "cmAddDependenciesCommand.h"
#include "cmAddExecutableCommand.h"
#include "cmAddLibraryCommand.h"
#include "cmAddSubDirectoryCommand.h"
#include "cmAddTestCommand.h"
#include "cmBlockCommand.h"
#include "cmBreakCommand.h"
#include "cmBuildCommand.h"
#include "cmCMakeLanguageCommand.h"
#include "cmCMakeMinimumRequired.h"
#include "cmCMakePathCommand.h"
#include "cmCMakePolicyCommand.h"
#include "cmConfigureFileCommand.h"
#include "cmContinueCommand.h"
#include "cmCreateTestSourceList.h"
#include "cmDefinePropertyCommand.h"
#include "cmEnableLanguageCommand.h"
#include "cmEnableTestingCommand.h"
#include "cmExecProgramCommand.h"
#include "cmExecuteProcessCommand.h"
#include "cmFileCommand.h"
#include "cmFindFileCommand.h"
#include "cmFindLibraryCommand.h"
#include "cmFindPackageCommand.h"
#include "cmFindPathCommand.h"
#include "cmFindProgramCommand.h"
#include "cmForEachCommand.h"
#include "cmFunctionCommand.h"
#include "cmGetCMakePropertyCommand.h"
#include "cmGetDirectoryPropertyCommand.h"
#include "cmGetFilenameComponentCommand.h"
#include "cmGetPropertyCommand.h"
#include "cmGetSourceFilePropertyCommand.h"
#include "cmGetTargetPropertyCommand.h"
#include "cmGetTestPropertyCommand.h"
#include "cmIfCommand.h"
#include "cmIncludeCommand.h"
#include "cmIncludeDirectoryCommand.h"
#include "cmIncludeGuardCommand.h"
#include "cmIncludeRegularExpressionCommand.h"
#include "cmInstallCommand.h"
#include "cmInstallFilesCommand.h"
#include "cmInstallTargetsCommand.h"
#include "cmLinkDirectoriesCommand.h"
#include "cmListCommand.h"
#include "cmMacroCommand.h"
#include "cmMakeDirectoryCommand.h"
#include "cmMarkAsAdvancedCommand.h"
#include "cmMathCommand.h"
#include "cmMessageCommand.h"
#include "cmOptionCommand.h"
#include "cmParseArgumentsCommand.h"
#include "cmPolicies.h"
#include "cmProjectCommand.h"
#include "cmReturnCommand.h"
#include "cmSeparateArgumentsCommand.h"
#include "cmSetCommand.h"
#include "cmSetDirectoryPropertiesCommand.h"
#include "cmSetPropertyCommand.h"
#include "cmSetSourceFilesPropertiesCommand.h"
#include "cmSetTargetPropertiesCommand.h"
#include "cmSetTestsPropertiesCommand.h"
#include "cmSiteNameCommand.h"
#include "cmState.h"
#include "cmStringCommand.h"
#include "cmSubdirCommand.h"
#include "cmTargetCompileDefinitionsCommand.h"
#include "cmTargetCompileFeaturesCommand.h"
#include "cmTargetCompileOptionsCommand.h"
#include "cmTargetIncludeDirectoriesCommand.h"
#include "cmTargetLinkLibrariesCommand.h"
#include "cmTargetLinkOptionsCommand.h"
#include "cmTargetPrecompileHeadersCommand.h"
#include "cmTargetSourcesCommand.h"
#include "cmTryCompileCommand.h"
#include "cmTryRunCommand.h"
#include "cmUnsetCommand.h"
#include "cmWhileCommand.h"#if !defined(CMAKE_BOOTSTRAP)
#  include "cmAddCompileOptionsCommand.h"
#  include "cmAddLinkOptionsCommand.h"
#  include "cmAuxSourceDirectoryCommand.h"
#  include "cmBuildNameCommand.h"
#  include "cmCMakeHostSystemInformationCommand.h"
#  include "cmExportCommand.h"
#  include "cmExportLibraryDependenciesCommand.h"
#  include "cmFLTKWrapUICommand.h"
#  include "cmFileAPICommand.h"
#  include "cmIncludeExternalMSProjectCommand.h"
#  include "cmInstallProgramsCommand.h"
#  include "cmLinkLibrariesCommand.h"
#  include "cmLoadCacheCommand.h"
#  include "cmLoadCommandCommand.h"
#  include "cmOutputRequiredFilesCommand.h"
#  include "cmQTWrapCPPCommand.h"
#  include "cmQTWrapUICommand.h"
#  include "cmRemoveCommand.h"
#  include "cmRemoveDefinitionsCommand.h"
#  include "cmSourceGroupCommand.h"
#  include "cmSubdirDependsCommand.h"
#  include "cmTargetLinkDirectoriesCommand.h"
#  include "cmUseMangledMesaCommand.h"
#  include "cmUtilitySourceCommand.h"
#  include "cmVariableRequiresCommand.h"
#  include "cmVariableWatchCommand.h"
#  include "cmWriteFileCommand.h"
#endifvoid GetScriptingCommands(cmState* state)
{state->AddFlowControlCommand("break", cmBreakCommand);state->AddFlowControlCommand("continue", cmContinueCommand);state->AddFlowControlCommand("foreach", cmForEachCommand);state->AddFlowControlCommand("function", cmFunctionCommand);state->AddFlowControlCommand("if", cmIfCommand);state->AddFlowControlCommand("macro", cmMacroCommand);state->AddFlowControlCommand("return", cmReturnCommand);state->AddFlowControlCommand("while", cmWhileCommand);state->AddFlowControlCommand("block", cmBlockCommand);state->AddBuiltinCommand("cmake_language", cmCMakeLanguageCommand);state->AddBuiltinCommand("cmake_minimum_required", cmCMakeMinimumRequired);state->AddBuiltinCommand("cmake_path", cmCMakePathCommand);state->AddBuiltinCommand("cmake_policy", cmCMakePolicyCommand);state->AddBuiltinCommand("configure_file", cmConfigureFileCommand);state->AddBuiltinCommand("execute_process", cmExecuteProcessCommand);state->AddBuiltinCommand("file", cmFileCommand);state->AddBuiltinCommand("find_file", cmFindFile);state->AddBuiltinCommand("find_library", cmFindLibrary);state->AddBuiltinCommand("find_package", cmFindPackage);state->AddBuiltinCommand("find_path", cmFindPath);state->AddBuiltinCommand("find_program", cmFindProgram);state->AddBuiltinCommand("get_cmake_property", cmGetCMakePropertyCommand);state->AddBuiltinCommand("get_directory_property",cmGetDirectoryPropertyCommand);state->AddBuiltinCommand("get_filename_component",cmGetFilenameComponentCommand);state->AddBuiltinCommand("get_property", cmGetPropertyCommand);state->AddBuiltinCommand("include", cmIncludeCommand);state->AddBuiltinCommand("include_guard", cmIncludeGuardCommand);state->AddBuiltinCommand("list", cmListCommand);state->AddBuiltinCommand("make_directory", cmMakeDirectoryCommand);state->AddBuiltinCommand("mark_as_advanced", cmMarkAsAdvancedCommand);state->AddBuiltinCommand("math", cmMathCommand);state->AddBuiltinCommand("message", cmMessageCommand);state->AddBuiltinCommand("option", cmOptionCommand);state->AddBuiltinCommand("cmake_parse_arguments", cmParseArgumentsCommand);state->AddBuiltinCommand("separate_arguments", cmSeparateArgumentsCommand);state->AddBuiltinCommand("set", cmSetCommand);state->AddBuiltinCommand("set_directory_properties",cmSetDirectoryPropertiesCommand);state->AddBuiltinCommand("set_property", cmSetPropertyCommand);state->AddBuiltinCommand("site_name", cmSiteNameCommand);state->AddBuiltinCommand("string", cmStringCommand);state->AddBuiltinCommand("unset", cmUnsetCommand);state->AddUnexpectedFlowControlCommand("else","An ELSE command was found outside of a proper ""IF ENDIF structure. Or its arguments did not match ""the opening IF command.");state->AddUnexpectedFlowControlCommand("elseif","An ELSEIF command was found outside of a proper ""IF ENDIF structure.");state->AddUnexpectedFlowControlCommand("endforeach","An ENDFOREACH command was found outside of a proper ""FOREACH ENDFOREACH structure. Or its arguments did ""not match the opening FOREACH command.");state->AddUnexpectedFlowControlCommand("endfunction","An ENDFUNCTION command was found outside of a proper ""FUNCTION ENDFUNCTION structure. Or its arguments did not ""match the opening FUNCTION command.");state->AddUnexpectedFlowControlCommand("endif","An ENDIF command was found outside of a proper ""IF ENDIF structure. Or its arguments did not match ""the opening IF command.");state->AddUnexpectedFlowControlCommand("endmacro","An ENDMACRO command was found outside of a proper ""MACRO ENDMACRO structure. Or its arguments did not ""match the opening MACRO command.");state->AddUnexpectedFlowControlCommand("endwhile","An ENDWHILE command was found outside of a proper ""WHILE ENDWHILE structure. Or its arguments did not ""match the opening WHILE command.");state->AddUnexpectedFlowControlCommand("endblock","An ENDBLOCK command was found outside of a proper ""BLOCK ENDBLOCK structure.");#if !defined(CMAKE_BOOTSTRAP)state->AddBuiltinCommand("cmake_host_system_information",cmCMakeHostSystemInformationCommand);state->AddBuiltinCommand("load_cache", cmLoadCacheCommand);state->AddBuiltinCommand("remove", cmRemoveCommand);state->AddBuiltinCommand("variable_watch", cmVariableWatchCommand);state->AddBuiltinCommand("write_file", cmWriteFileCommand);state->AddDisallowedCommand("build_name", cmBuildNameCommand, cmPolicies::CMP0036,"The build_name command should not be called; see CMP0036.");state->AddDisallowedCommand("use_mangled_mesa", cmUseMangledMesaCommand, cmPolicies::CMP0030,"The use_mangled_mesa command should not be called; see CMP0030.");state->AddDisallowedCommand("exec_program", cmExecProgramCommand,cmPolicies::CMP0153,"The exec_program command should not be called; ""see CMP0153. Use execute_process() instead.","Use execute_process() instead.");#endif
}void GetProjectCommands(cmState* state)
{state->AddBuiltinCommand("add_compile_definitions",cmAddCompileDefinitionsCommand);state->AddBuiltinCommand("add_custom_command", cmAddCustomCommandCommand);state->AddBuiltinCommand("add_custom_target", cmAddCustomTargetCommand);state->AddBuiltinCommand("add_definitions", cmAddDefinitionsCommand);state->AddBuiltinCommand("add_dependencies", cmAddDependenciesCommand);state->AddBuiltinCommand("add_executable", cmAddExecutableCommand);state->AddBuiltinCommand("add_library", cmAddLibraryCommand);state->AddBuiltinCommand("add_subdirectory", cmAddSubDirectoryCommand);state->AddBuiltinCommand("add_test", cmAddTestCommand);state->AddBuiltinCommand("build_command", cmBuildCommand);state->AddBuiltinCommand("create_test_sourcelist", cmCreateTestSourceList);state->AddBuiltinCommand("define_property", cmDefinePropertyCommand);state->AddBuiltinCommand("enable_language", cmEnableLanguageCommand);state->AddBuiltinCommand("enable_testing", cmEnableTestingCommand);state->AddBuiltinCommand("get_source_file_property",cmGetSourceFilePropertyCommand);state->AddBuiltinCommand("get_target_property", cmGetTargetPropertyCommand);state->AddBuiltinCommand("get_test_property", cmGetTestPropertyCommand);state->AddBuiltinCommand("include_directories", cmIncludeDirectoryCommand);state->AddBuiltinCommand("include_regular_expression",cmIncludeRegularExpressionCommand);state->AddBuiltinCommand("install", cmInstallCommand);state->AddBuiltinCommand("install_files", cmInstallFilesCommand);state->AddBuiltinCommand("install_targets", cmInstallTargetsCommand);state->AddBuiltinCommand("link_directories", cmLinkDirectoriesCommand);state->AddBuiltinCommand("project", cmProjectCommand);state->AddBuiltinCommand("set_source_files_properties",cmSetSourceFilesPropertiesCommand);state->AddBuiltinCommand("set_target_properties",cmSetTargetPropertiesCommand);state->AddBuiltinCommand("set_tests_properties",cmSetTestsPropertiesCommand);state->AddBuiltinCommand("subdirs", cmSubdirCommand);state->AddBuiltinCommand("target_compile_definitions",cmTargetCompileDefinitionsCommand);state->AddBuiltinCommand("target_compile_features",cmTargetCompileFeaturesCommand);state->AddBuiltinCommand("target_compile_options",cmTargetCompileOptionsCommand);state->AddBuiltinCommand("target_include_directories",cmTargetIncludeDirectoriesCommand);state->AddBuiltinCommand("target_link_libraries",cmTargetLinkLibrariesCommand);state->AddBuiltinCommand("target_link_options", cmTargetLinkOptionsCommand);state->AddBuiltinCommand("target_sources", cmTargetSourcesCommand);state->AddBuiltinCommand("try_compile", cmTryCompileCommand);state->AddBuiltinCommand("try_run", cmTryRunCommand);state->AddBuiltinCommand("target_precompile_headers",cmTargetPrecompileHeadersCommand);#if !defined(CMAKE_BOOTSTRAP)state->AddBuiltinCommand("add_compile_options", cmAddCompileOptionsCommand);state->AddBuiltinCommand("aux_source_directory",cmAuxSourceDirectoryCommand);state->AddBuiltinCommand("export", cmExportCommand);state->AddBuiltinCommand("fltk_wrap_ui", cmFLTKWrapUICommand);state->AddBuiltinCommand("include_external_msproject",cmIncludeExternalMSProjectCommand);state->AddBuiltinCommand("install_programs", cmInstallProgramsCommand);state->AddBuiltinCommand("add_link_options", cmAddLinkOptionsCommand);state->AddBuiltinCommand("link_libraries", cmLinkLibrariesCommand);state->AddBuiltinCommand("target_link_directories",cmTargetLinkDirectoriesCommand);state->AddBuiltinCommand("qt_wrap_cpp", cmQTWrapCPPCommand);state->AddBuiltinCommand("qt_wrap_ui", cmQTWrapUICommand);state->AddBuiltinCommand("remove_definitions", cmRemoveDefinitionsCommand);state->AddBuiltinCommand("source_group", cmSourceGroupCommand);state->AddBuiltinCommand("cmake_file_api", cmFileAPICommand);state->AddDisallowedCommand("export_library_dependencies", cmExportLibraryDependenciesCommand,cmPolicies::CMP0033,"The export_library_dependencies command should not be called; ""see CMP0033.");state->AddDisallowedCommand("load_command", cmLoadCommandCommand, cmPolicies::CMP0031,"The load_command command should not be called; see CMP0031.");state->AddDisallowedCommand("output_required_files", cmOutputRequiredFilesCommand, cmPolicies::CMP0032,"The output_required_files command should not be called; see CMP0032.");state->AddDisallowedCommand("subdir_depends", cmSubdirDependsCommand, cmPolicies::CMP0029,"The subdir_depends command should not be called; see CMP0029.");state->AddDisallowedCommand("utility_source", cmUtilitySourceCommand, cmPolicies::CMP0034,"The utility_source command should not be called; see CMP0034.");state->AddDisallowedCommand("variable_requires", cmVariableRequiresCommand, cmPolicies::CMP0035,"The variable_requires command should not be called; see CMP0035.");
#endif
}void GetProjectCommandsInScriptMode(cmState* state)
{
#define CM_UNEXPECTED_PROJECT_COMMAND(NAME)                                   \state->AddUnexpectedCommand(NAME, "command is not scriptable")CM_UNEXPECTED_PROJECT_COMMAND("add_compile_options");CM_UNEXPECTED_PROJECT_COMMAND("add_custom_command");CM_UNEXPECTED_PROJECT_COMMAND("add_custom_target");CM_UNEXPECTED_PROJECT_COMMAND("add_definitions");CM_UNEXPECTED_PROJECT_COMMAND("add_dependencies");CM_UNEXPECTED_PROJECT_COMMAND("add_executable");CM_UNEXPECTED_PROJECT_COMMAND("add_library");CM_UNEXPECTED_PROJECT_COMMAND("add_subdirectory");CM_UNEXPECTED_PROJECT_COMMAND("add_test");CM_UNEXPECTED_PROJECT_COMMAND("aux_source_directory");CM_UNEXPECTED_PROJECT_COMMAND("build_command");CM_UNEXPECTED_PROJECT_COMMAND("cmake_file_api");CM_UNEXPECTED_PROJECT_COMMAND("create_test_sourcelist");CM_UNEXPECTED_PROJECT_COMMAND("define_property");CM_UNEXPECTED_PROJECT_COMMAND("enable_language");CM_UNEXPECTED_PROJECT_COMMAND("enable_testing");CM_UNEXPECTED_PROJECT_COMMAND("export");CM_UNEXPECTED_PROJECT_COMMAND("fltk_wrap_ui");CM_UNEXPECTED_PROJECT_COMMAND("get_source_file_property");CM_UNEXPECTED_PROJECT_COMMAND("get_target_property");CM_UNEXPECTED_PROJECT_COMMAND("get_test_property");CM_UNEXPECTED_PROJECT_COMMAND("include_directories");CM_UNEXPECTED_PROJECT_COMMAND("include_external_msproject");CM_UNEXPECTED_PROJECT_COMMAND("include_regular_expression");CM_UNEXPECTED_PROJECT_COMMAND("install");CM_UNEXPECTED_PROJECT_COMMAND("link_directories");CM_UNEXPECTED_PROJECT_COMMAND("link_libraries");CM_UNEXPECTED_PROJECT_COMMAND("project");CM_UNEXPECTED_PROJECT_COMMAND("qt_wrap_cpp");CM_UNEXPECTED_PROJECT_COMMAND("qt_wrap_ui");CM_UNEXPECTED_PROJECT_COMMAND("remove_definitions");CM_UNEXPECTED_PROJECT_COMMAND("set_source_files_properties");CM_UNEXPECTED_PROJECT_COMMAND("set_target_properties");CM_UNEXPECTED_PROJECT_COMMAND("set_tests_properties");CM_UNEXPECTED_PROJECT_COMMAND("source_group");CM_UNEXPECTED_PROJECT_COMMAND("target_compile_definitions");CM_UNEXPECTED_PROJECT_COMMAND("target_compile_features");CM_UNEXPECTED_PROJECT_COMMAND("target_compile_options");CM_UNEXPECTED_PROJECT_COMMAND("target_include_directories");CM_UNEXPECTED_PROJECT_COMMAND("target_link_libraries");CM_UNEXPECTED_PROJECT_COMMAND("target_sources");CM_UNEXPECTED_PROJECT_COMMAND("try_compile");CM_UNEXPECTED_PROJECT_COMMAND("try_run");// deprecated commandsCM_UNEXPECTED_PROJECT_COMMAND("export_library_dependencies");CM_UNEXPECTED_PROJECT_COMMAND("load_command");CM_UNEXPECTED_PROJECT_COMMAND("output_required_files");CM_UNEXPECTED_PROJECT_COMMAND("subdir_depends");CM_UNEXPECTED_PROJECT_COMMAND("utility_source");CM_UNEXPECTED_PROJECT_COMMAND("variable_requires");#undef CM_UNEXPECTED_PROJECT_COMMAND
}

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

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

相关文章

QT 实现信号源实时采集功能支持频谱图,瀑布图显示

利用QT实现信号源实时采集功能&#xff0c;先看效果 支持双光标显示 &#xff0c;功率测量&#xff0c;带宽测量&#xff0c;载噪比测量&#xff0c;波形框选&#xff0c;水平移动等功能&#xff0c;下载链接 https://download.csdn.net/download/ZuoYueXian/90501632 实现方…

【Kafka】深入了解Kafka

集群的成员关系 Kafka使用Zookeeper维护集群的成员信息。 每一个broker都有一个唯一的标识&#xff0c;这个标识可以在配置文件中指定&#xff0c;也可以自动生成。当broker在启动时通过创建Zookeeper的临时节点把自己的ID注册到Zookeeper中。broker、控制器和其他一些动态系…

神聖的綫性代數速成例題10. N維矢量綫性運算、矢量由矢量組綫性表示、N個N維矢量相關性質

N 維矢量綫性運算&#xff1a; 設&#xff0c;是維矢量&#xff0c;是數。加法&#xff1a;。數乘&#xff1a;。 矢量由矢量組綫性表示&#xff1a; 設是n維矢量&#xff0c;若存在一組數&#xff0c;使得&#xff0c;則稱矢量可由矢量組綫性表示。 N 個 N 維矢量相關性質&…

在CentOS 7.6中安装openGauss 5.1.0 (Preview)数据库并使用Navicat进行远程连接的过程记录

部署环境 华为云Flexus应用服务器 操作系统&#xff1a;CentOS 7.6 openGauss版本&#xff1a;openGauss 5.1.0 (Preview) 参考文档 官方安装文档&#xff1a; https://docs.opengauss.org/zh/docs/5.1.0/docs/InstallationGuide/%E4%BA%86%E8%A7%A3%E5%AE%89%E8%A3%85%E6%B…

SysOM 可观测体系建设(一):万字长文解读低开销、高精度性能剖析工具livetrace

可观测性是一种通过分析系统输出结果并推断和衡量系统内部状态的能力。谈及可观测性一般包含几大功能&#xff1a;监控指标、链路追踪、告警日志&#xff0c;及 Continues Profiling 持续剖析能力。对于操作系统可观测&#xff0c;监控指标可以帮助查看各个子系统&#xff08;I…

Shell脚本学习笔记:从入门到变量(一)

前言 最近在看 Shell 脚本相关的内容&#xff0c;以下是我从入门到变量部分的整理笔记&#xff0c;内容有点多&#xff0c;但都是干货。 先从基础开始&#xff0c;再逐步深入。 一、Shell 脚本入门 1. Linux 如何控制硬件&#xff1f; Linux 靠内核操作硬件&#xff08;CP…

Linux应用:进程间通信

linux的进程间通信概述 进程间通信&#xff08;IPC&#xff0c;Inter - Process Communication&#xff09;是指在不同进程之间进行数据交换和同步的机制。由于每个进程都有自己独立的地址空间&#xff0c;直接共享内存存在困难&#xff0c;因此需要专门的 IPC 机制来实现进程…

el-input 不可编辑,但是点击的时候出现弹窗/或其他操作面板,并且带可清除按钮

1.focus“getFocus”鼠标聚焦的时候写个方法&#xff0c;弹窗起来 getFocus(){ this.定义的弹窗状态字段 true;} 2.点击确定的时候&#xff0c;数值赋值到el-input的输入框,弹窗取消&#xff08;this.定义的弹段字端 false&#xff09; 3.但是会有个问题就是el-input 不可点…

Weblogic未授权远程命令执行漏洞复现

1 漏洞简介 Weblogic是Oracle公司推出的J2EE应用服务器&#xff0c;CVE-2020-14882允许未授权的用户绕过管理控制台的权限验证访问后台&#xff0c;CVE-2020-14883允许后台任意用户通过HTTP协议执行任意命令。使用这两个漏洞组成的利用链&#xff0c;可通过一个GET请求在远程W…

海康SDK协议在智联视频超融合平台中的接入方法

一. 海康SDK协议详解 海康SDK协议原理 海康SDK协议是海康威视为开发者提供的一套软件开发工具包&#xff0c;用于与海康设备&#xff08;如摄像头、NVR、DVR等&#xff09;进行通信和控制。其核心原理包括&#xff1a; 网络通信&#xff1a;基于TCP/IP协议&#xff0c;实现设…

五模型对比!Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量时间序列预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 光伏功率预测&#xff01;五模型对比&#xff01;Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量时间序列预测(Matlab2023b 多输入单输出) 1.程序已经调试好&#xff0c;替换数据集后&#xff0c;仅运…

20250319在荣品的PRO-RK3566开发板的buildroot系统下使用集成的QT应用调试串口UART3

stty -F /dev/ttyS3 115200 -echo cat /dev/ttyS3 & echo serialdata > /dev/ttyS3 20250319在荣品的PRO-RK3566开发板的buildroot系统下使用集成的QT应用调试串口UART3 2025/3/19 14:17 缘起&#xff1a;在荣品的PRO-RK3566开发板的buildroot系统下&#xff0c;在命令…

Git 使用笔记

参考链接&#xff1a; 创建版本库 - Git教程 - 廖雪峰的官方网站 Git使用教程,最详细&#xff0c;最傻瓜&#xff0c;最浅显&#xff0c;真正手把手教 - 知乎 命令使用 cd f: 切换目录到 F 盘 cd gitCxl 切换目录到 gitCxl 文件夹 mkdir gitCxl 创建新文件…

Xilinx系列FPGA视频采集转HDMI2.0输出,基于HDMI 1.4/2.0 Transmitter Subsystem方案,提供6套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我已有的 GT 高速接口解决方案我已有的FPGA图像处理方案 3、详细设计方案设计框图硬件设计架构FPGA开发板输入Sensor之-->OV5640摄像头动态彩条Video In To AXI4-S…

机器学习面试重点第二部分(动画版)

​ 目录 ​ 第一章、聚类算法 ​1.1 K-means 聚类 ​1.1.1 算法​编辑流程 1.1.2 优缺点 ​1.1.3 应用场景 ​1.2 层次聚类 ​1.2.1 算法流程 1.2.2 优缺点 ​1.2.3 应用场景 ​1.3 DBSCAN ​1.3.1 算法流程 1.3.2 优缺点 ​1.3.3 应用场景 1.3.4. 参数 ε&…

剑指Offer精选:Java与Spring高频面试题深度解析

一、Java底层核心机制 &#x1f525; 问题1&#xff1a;谈谈对Java的理解&#xff1f; &#x1f4cc; 核心技术特性 平台无关性 "一次编译&#xff0c;到处运行"&#xff1a;通过JVM实现跨平台兼容 字节码&#xff08;.class&#xff09;作为中间语言&#xff0c;…

RabbitMQ 集群降配

这里写自定义目录标题 摘要检查状态1. 检查 RabbitMQ 服务状态2. 检查 RabbitMQ 端口监听3. 检查 RabbitMQ 管理插件是否启用4. 检查开机自启状态5. 确认集群高可用性6. 检查使用该集群的服务是否做了断开重连 实操1. 负载均衡配置2. 逐个节点降配&#xff08;滚动操作&#xf…

【正点原子K210连载】第七十六章 音频FFT实验 摘自【正点原子】DNK210使用指南-CanMV版指南

第七十六章 音频FFT实验 本章将介绍CanMV下FFT的应用&#xff0c;通过将时域采集到的音频数据通过FFT为频域。通过本章的学习&#xff0c;读者将学习到CanMV下控制FFT加速器进行FFT的使用。 本章分为如下几个小节&#xff1a; 32.1 maix.FFT模块介绍 32.2 硬件设计 32.3 程序设…

嵌入式开发之STM32学习笔记day08

从“门铃”到“中断”&#xff1a;手把手玩转STM32的外部中断控制器&#xff08;EXTI&#xff09; 引言&#xff1a;为什么我们需要“中断”&#xff1f; &#xff08;类比生活场景&#xff1a;用“快递按门铃”解释中断的意义&#xff09; 想象一下&#xff1a;当你在…

JVM的一些知识

JVM简介 JVM 是 Java Virtual Machine 的简称&#xff0c;意为 Java 虚拟机。 虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。常见的虚拟机&#xff1a;JVM、VMwave、Virtual Box。 JVM 和其他两个虚拟机的区别&#xff1a; VMw…