Cmake+基础命令
一、版本要求:
检查 cmake 版本号的最低要求,不满足条件时报错。
cmake_minimum_required(VERSION <version>)
参数:
- version:最低要求的版本号
例子:
# 最低要求安装3.21版本的cmake
cmake_minimum_required(VERSION 3.21)
二、工程名称:
设置项目的工程名称,此名称设置后可以使用 CMAKE_PROJECT_NAME 宏直接获取
project(<name> [language])
参数:
- name:项目名称
- language:指定项目的编程语言,例如:C、CXX、ASM
例子:
# 指定项目使用 C、C++或者是汇编
set(BUILD_TARGET main)
project(${BUILD_TARGET} C CXX ASM)
三、添加构建目录
增加 cmake 子目录,用于建立 Cmakelists.txt 文件层级的依赖
add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL] [SYSTEM])
参数:
- source_dir:该参数指定一个子目录,子目录下应该包含 CMakeLists.txt 文件和代码文件
- binary_dir:指定输出目录,如果没有指定,默认生成到 source_dir 目录
例子:
# 指定 cmake 子目录
add_subdirectory(deps/)
四、添加宏定义(-Dxxx)
为编译目标或者所有目标增加宏定义
# 为当前路径的所有源文件和target增加编译定义
# 方式1
add_definitions(-DFOO -DBAR ...)
# 方式2
add_compile_definitions(<definition> ...)# 为指定的target指定宏定义
target_compile_definitions(<target><INTERFACE|PUBLIC|PRIVATE> [definition1...][<INTERFACE|PUBLIC|PRIVATE> [definition2...] ...])
参数:
- target:宏定义所属的目标,可以有 add_executable() 或 add_library() 定义
- definition:指定的宏定义,不需要带 -D
例子:
add_definitions(-DFOO=1 -DBAR)add_compile_definitions(FOO=1 BAR)target_compile_definitions(target PRIVATE FOO=1 PUBLIC BAR)
target_compile_definitions 可以指定目标进行宏定义,例如代码中有宏进行隔离的部分,可以通过为 target 指定不同的宏,配合 add_library() 来生成不同的库文件。
五、生成可执行文件
增加一个目标用于生成可执行文件
add_executable(<target> [EXCLUDE_FROM_ALL] [source1] [source2 ...])
参数:
- target:可执行目标的名称
- EXCLUDE_FROM_ALL:当使用这个选项时指定的文件将不参与构建
- source:源文件列表,也可以通过 target_sources() 为可执行目标文件添加源文件,要求是在调用 target_sources 之前,可执行目标文件必须已经通过 add_executable() 或 add_library() 定义了。
例子:
# 直接指定源文件
add_executable(main main.c)# 通过 target_sources 追加源文件
add_executable(main)
target_sources(main PUBLIC main.c other.c)
六、生成库文件
普通库生成
生成普通的静态库或者是动态库文件
add_library(<name> [STATIC | SHARED | MODULE]
[EXCLUDE_FROM_ALL]
[<source>...])
参数:
- name:库的名称
- STATIC|SHARED|MOUDLE:库的类型
- source:构建库的文件,也可以通过 target_sources() 继续为可执行目标文件添加源文件
例子:
# 生成静态库
add_library(main STATIC ${libs_src})# 生成动态库
add_library(list SHARED ${libs_src})
对象库生成
只编译,但是不会进行库的打包
add_library(<name> OBJECT [<source>...])
只编译 source 列表的文件,但不将生成的目标文件打包为库,而是在其他 add_library() 或者 add_executable() 生成目标的时候,可以使用形如$<TARGET_OBJECTS:objlib>的表达式将对象库作为源引入。
参数:
- name:库的名称
- OBJECT:库的类型
- source:构建库的文件,也可以通过target_sources()继续为可执行目标文件添加源文件
例子:
add_library(list OBJECT ./list.c)
add_library(mylist $<TARGET_OBJECTS:list>)
七、指定头文件目录(gcc -I):
为所有目标或者指定的目标增加头文件搜索路径
# 为所有target 添加头文件路径
include_directories([AFTER|BEFORE] dir1 [dir2 ...])# 为指定目标添加头文件路径
target_include_directories(<target> [SYSTEM] [AFTER|BEFORE]<INTERFACE|PUBLIC|PRIVATE> [dir1...][<INTERFACE|PUBLIC|PRIVATE> [dir1...] ...])
include_directories 会为当前 CMakeLists.txt 的所有目标,以及之后添加的所有子目录的目标添加头文件搜索路径。
参数:
- AFTER、BEFORE:指定的路径添加到搜索列表前面还是后面,默认 AFTER;
- dir:指定要搜索的头文件目录,目录是当前源码路径(当前 CMakeLists.txt)的相对路径;
- target: 要添加头文件的目标,target由 add_library 和 add_executable 添加;
- dir 指定的源文件或者头文件,地址是相对于 CMAKE_CURRENT_SOURCE_DIR 的地址;
例子:
include_directories(${CMAKE_SOURCE_DIR}/include)target_include_directories(${target} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
八、收集源文件:
收集指定目录下的源文件
aux_source_directory(<dir> <variable>)
参数:
- dir:指定的目录;
- variable:把源文件列表保存到指定的变量中;
例子:
aux_source_directory(../src LOCAL_SRC)
# 排除 src 路径下的 test.c 文件
list(REMOVE_ITEM LOCAL_SRC "../src/test.c")# 使用 file 收集源文件
file(GLOB LOCAL_SRC src/*.c)
九、指定库文件目录(gcc -L):
为所有目标或指定目标添加库文件搜索路径
link_directories(dir1 dir2 ...)# 为指定目标添加库文件搜索目录
target_link_directories(<target> [BEFORE]<INTERFACE|PUBLIC|PRIVATE> [items1...][<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
参数:
- AFTER、BEFORE:指定的路径添加到搜索列表前面还是后面,默认AFTER;
- dir:指定要搜索的库文件目录,目录是当前源码路径(当前 CMakeLists.txt)的相对路径;
- target: 要添加头文件的目标,target 由 add_library() 和 add_executable() 添加;
- items 指定的源文件或者头文件,地址是相对于 CMAKE_CURRENT_SOURCE_DIR 的地址;
例子:
link_directories(${CMAKE_SOURCE_DIR}/lib)target_link_directories(${target} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/lib)
如果在使用 target_link_libraries 时库已经包含了绝对路径时也可以不需要指定库的搜索路径。
十、指定库文件(gcc -l)
为目标添加链接是需要的库文件
target_link_libraries(<target> ... <item>... ...) # link_libraries 已经弃用
参数:
- target: 要增加的目标,必须先通过 或 指定;
- item:依赖的的库名称;
例子:
# 三种写法功能相同,在使用前必须通过命令指定 target
target_link_libraries(main -Wl,--start-group eng mx -Wl,--end-group)target_link_libraries(main -Wl,--start-group -leng -lmx -Wl,--end-group)target_link_libraries(main -Wl,--start-group libeng.so libmx.so -Wl,--end-group)
十一、增加编译选项:
增加编译选项
add_compile_options(<option> ...)
参数:
- option:编译选项
例子:
# 增加针对所有编译器的选项
add_compile_options(-g -Os
-Wall
-Wno-unused-variable
-fno-strict-aliasing
-ffunction-sections -fdata-sections
)# 增加针对指定编译器的选项
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fno-exceptions -fno-rtti -fno-threadsafe-statics")
add_compile_options 是为所有编译器增加链接选项,但是有些选项需要区分编译器,例如 c 和 c++ 中特有的选项,则需要使用set 设置指定的宏。
十二、增加链接选项:
增加链接选项
add_link_options(<option> ...)
参数:
- option:链接选项
例子:
add_link_options(-Wl,-Map=${PROJECT_NAME}.map
-Wl,--gc-sections
)
十三、定义全局属性:
有些时候需要在 cmake 多个层级之间传递内容,则可以使用自定义的全局属性
# 定义 MY_LIBRARIES 用于收集所有的打包后库文件
function(add_globle_libraries)
get_property(TIDE_LIBRARIES GLOBAL PROPERTY MY_LIBRARIES)
set_property(GLOBAL PROPERTY MY_LIBRARIES ${MY_LIBRARIES} ${ARGN})
endfunction()# 获取 MY_LIBRARIES 中库文件列表
get_property(MY_LIBRARIES GLOBAL PROPERTY MY_LIBRARIES)
十四、执行命令:
用来在 cmake 中执行命令或是调用其他程序
execute_process(COMMAND <cmd1> [<arguments>]
[COMMAND <cmd2> [<arguments>]]...
[WORKING_DIRECTORY <directory>]
[TIMEOUT <seconds>]
[RESULT_VARIABLE <variable>]
[RESULTS_VARIABLE <variable>]
[OUTPUT_VARIABLE <variable>]
[ERROR_VARIABLE <variable>]
[INPUT_FILE <file>]
[OUTPUT_FILE <file>]
[ERROR_FILE <file>]
[OUTPUT_QUIET]
[ERROR_QUIET]
[COMMAND_ECHO <where>]
[OUTPUT_STRIP_TRAILING_WHITESPACE]
[ERROR_STRIP_TRAILING_WHITESPACE]
[ENCODING <name>]
[ECHO_OUTPUT_VARIABLE]
[ECHO_ERROR_VARIABLE]
[COMMAND_ERROR_IS_FATAL <ANY|LAST>])
命令 COMMAND 会并行执行,每个子进程的标准输出映射到下一个进程的标准输入上,所有进程共用 standard error 管道。
参数:
- COMMAND: 子进程的命令行,直接使用操作系统api执行
- WORKING_DIRECTORY:在指定的目录下执行 COMMAND 命令
- TIMEOUT:超时时间
- RESULT_VARIABLE:最后一个子进程的返回值(正常是0,异常是其他整数)
- OUTPUT_VARIABLE:对应于standard output的内容
- ERROR_VARIABLE:对应于standard error的内容
- OUTPUT_STRIP_TRAILING_WHITESPACE/ERROR_STRIP_TRAILING_WHITESPACE:删除空白字符
例子:
# 执行 echo 命令
execute_process(COMMAND echo "hello world"WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}TIMEOUT 3RESULT_VARIABLE result_varOUTPUT_VARIABLE output_varERROR_VARIABLE error_varOUTPUT_STRIP_TRAILING_WHITESPACEERROR_STRIP_TRAILING_WHITESPACE)
message(STATUS "result: ${result_var}")
message(STATUS "output: ${output_var}")
message(STATUS "error: ${error_var}")# 获取当前环境下 gcc 中 libgcc.a 的完整路径
execute_process(COMMAND gcc --print-file-name libgcc.aOUTPUT_VARIABLE TIDE_LIBGCC_FILEOUTPUT_STRIP_TRAILING_WHITESPACE)
十五、定制化构建规则
add_custom_target:
添加一个伪目标(没有输出的目标),主要是通过依赖中的命令和依赖的依赖来进行相关动作,一般配合 add_custom_command 使用,通过 add_custom_command 的 OUTPUT 来作为 DEPENDS 依赖。
add_custom_target(Name [ALL] [command1 [args1...]]
[COMMAND command2 [args2...] ...]
[DEPENDS depend depend depend ... ]
[BYPRODUCTS [files...]]
[WORKING_DIRECTORY dir]
[COMMENT comment]
[JOB_POOL job_pool]
[VERBATIM] [USES_TERMINAL]
[COMMAND_EXPAND_LISTS]
[SOURCES src1 [src2...]])
参数:
- Name:target 目标名称
- ALL:说明该目标需要添加到默认目标的构建中,所以命令每次都会被执行
- COMMAND:构建时执行的命令
- COMMENT:注释信息,会在命令执行前打印出来
- DEPENDS:通常以同一 CMakeLists.txt 文件中的 add_custom_command() 命令生成的文件作为依赖
例子:
# 例子中通过 add_custom_target 设置一个没有输出的目标,通过目标的依赖来创建一个名称为 log.txt 的文件set(TEST_FILE "log.txt")
# 产生 FILE_TEST 文件,FILE_TEST 文件通过命令 copy 产生,并依赖 CMAKE_CURRENT_LIST_FILE
add_custom_command(OUTPUT ${TEST_FILE}COMMAND echo "Generating log.txt file..."COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_FILE} ${TEST_FILE}DEPENDS ${CMAKE_CURRENT_LIST_FILE}COMMENT "This is a test")# 创建一个伪目标 Test,这个伪目标依赖 TEST_FILE 文件
add_custom_target(TestALLCOMMAND echo "execute a custom target..."DEPENDS ${TEST_FILE})
add_custom_target 的最大作用就是通过一个虚拟的 target 形成依赖关系,依赖关系可以无限,例如:依赖1–>依赖2–>依赖3,从而形成一系列的串行动作,来产生输出。
add_custom_command:
用法一:生成文件
增加一个定制化的命令用来产生一个输出,这个输出一般被 add_custom_target 作为 DEPENDS 依赖。
add_custom_command(OUTPUT output1 [output2 ...]
COMMAND command1[ARGS] [args1...]
[COMMAND command2 [ARGS] [args2...] ...]
[MAIN_DEPENDENCY depend]
[DEPENDS[depends...]]
[IMPLICIT_DEPENDS<lang1> depend1 ...]
[WORKING_DIRECTORYdir]
[COMMENT comment] [VERBATIM] [APPEND])
参数:
- OUTPUT:指定输出(一般是一个中间文件)
- COMMAND:产生输出时执行的命令
- COMMENT:注释信息,会在命令执行前打印出来
- DEPENDS:命令执行的依赖,依赖发生修改就会执行 COMMAND 产生新的 OUTPUT。依赖可以是某个 target(通过add_library/add_executable/add_custom_target创建的)或者直接是某个文件
例子:
# 例子中通过 add_custom_target 设置一个没有输出的目标,通过目标的依赖来创建一个名称为 log.txt 的文件set(TEST_FILE "log.txt")
# 产生 FILE_TEST 文件,FILE_TEST 文件通过命令 copy 产生,并依赖 CMAKE_CURRENT_LIST_FILE
add_custom_command(OUTPUT ${TEST_FILE}COMMAND echo "Generating log.txt file..."COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_FILE} ${TEST_FILE}DEPENDS ${CMAKE_CURRENT_LIST_FILE}COMMENT "This is a test")# 创建一个伪目标 Test,这个伪目标依赖 TEST_FILE 文件
add_custom_target(TestALLCOMMAND echo "execute a custom target..."DEPENDS ${TEST_FILE})
注意:
add_custom_command 的 makefile 的表现形式如下,就是检查依赖,在依赖变动的情况下通过命令生成输出。
OUTPUT: MAIN_DEPENDENCY DEPENDSCOMMAND
add_custom_command(OUTPUT xxx) 不能单独使用,否则命令将不会被执行,所以他所产生的 OUTPUT 输出必须要被作为其他目标的依赖,这也是为什么必须要和 add_custom_target 配合的原因。
用法二:添加命令
为某个目标如库或可执行程序添加一个命令,并可以指明命令执行的时机,如果该目标已经构建,命令将不会执行。
add_custom_command(TARGET target
PRE_BUILD | PRE_LINK| POST_BUILD
COMMAND command1[ARGS] [args1...]
[COMMAND command2[ARGS] [args2...] ...]
[WORKING_DIRECTORYdir]
[COMMENT comment][VERBATIM])
参数:
- TARGET:指定要为那个 target 创建命令
- PRE_BUILD:在所有规则执行前执行
- PRE_LINK:在源文件编译后且链接前执行
- POST_BUILD:在所有规则执行后执行命令
- COMMAND:需要执行的命令
- COMMENT:注释信息,会在命令执行前打印出来
例子:
set(TEST_FILE "log.txt")# 作为依赖产生文件
add_custom_command(OUTPUT ${TEST_FILE}
COMMAND echo "Generating log.txt file..."
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_FILE} ${TEST_FILE}
DEPENDS ${CMAKE_CURRENT_LIST_FILE}
COMMENT "This is a test"
)# 创建一个没有输出的目标,注意是通过依赖来执行命令
add_custom_target(Test1
ALL
COMMAND pwd
DEPENDS ${TEST_FILE})# 为目标 Test1 增加一条定制化命令
add_custom_command(TARGET Test1
PRE_BUILD
COMMAND echo "executing a fake command"
COMMENT "This command will be executed before building target Test1"
)
十六、设置库输出路径:
# 设置静态库文件目录
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)# 动态库文件目录
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)# 可执行文件目录
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
十七、文件操作:
file(CMD <filename> [...])
https://cmake.org/cmake/help/latest/command/file.html
参数:
- CMD:文件操作命令,包括读、写、增、删、改等,具体参数见链接下的具体 CMD
- filename:文件名称
例子:
# 拷贝文件
file(COPY_FILE ./test.txt ./test2.txt)
十八、程序查找
find_program (<VAR>name | NAMES name1 [name2 ...] [NAMES_PER_DIR][HINTS [path | ENV var]... ][PATHS [path | ENV var]... ][REGISTRY_VIEW (64|32|64_32|32_64|HOST|TARGET|BOTH)][PATH_SUFFIXES suffix1 [suffix2 ...]][DOC "cache documentation string"][NO_CACHE][REQUIRED][NO_DEFAULT_PATH][NO_PACKAGE_ROOT_PATH][NO_CMAKE_PATH][NO_CMAKE_ENVIRONMENT_PATH][NO_SYSTEM_ENVIRONMENT_PATH][NO_CMAKE_SYSTEM_PATH][NO_CMAKE_INSTALL_PREFIX][CMAKE_FIND_ROOT_PATH_BOTH |ONLY_CMAKE_FIND_ROOT_PATH |NO_CMAKE_FIND_ROOT_PATH]
)
参数:
- VAR:寻找程序或者变量后结果的缓存
- NAMES:除了name 以外可以指定更多可能得名称
- HINTS:除了系统路径外,还需要搜索的路径,先搜索指定路径,后搜索系统路径
- PATHS:除了系统路径外,还需要搜索的路径,先搜索系统路径,后搜索指定路径
- REGISTRY_VIEW:指定必须要查询的注册表视图,仅用于windows,例如查找安装的一些软件路径
- REQUIRED:搜索不到会报错并停止搜索
- NO_DEFAULT_PATH:默认搜索路径将失效,只会搜索PATHS和HINTS指定的路径
例子:
# 搜索指定前缀的 gcc 程序
find_program(TIDE_C_COMPILER ${CROSS_COMPILE}gcc REQUIRED)# 搜索window下cmd 控制台程序
find_program(MY_PROGRAM cmd NAMES cmd.exe)
十九、目标属性设置:
set_target_properties(target1 target2 ...PROPERTIES prop1 value1prop2 value2 ...)
参数:
- target:需要设置属性的目标,在使用前 target 需要使用 add_library()或者 add_executable() 指定atrget。
- PROPERTIES:属性标识,后面紧接着时属性和属性值
- prop:属性标识
- value:属性值
例子:
# 对目标设置宏定义
set(BUILD_FLAGS "-DBUILD_DLL" )
set_target_properties(main PROPERTIES COMPILE_FLAGS ${BUILD_FLAGS})# 更改目标输出名称
add_library (libiwasm SHARED ${WAMR_RUNTIME_LIB_SOURCE})
set_target_properties (libiwasm PROPERTIES OUTPUT_NAME iwasm)# 设置目标文件输出目录
set_target_properties(iwasm PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/build/lib
)# 设置 include 目录搜索目录
set_target_properties(iwasm PROPERTIES INCLUDE_DIRECTORIES ${LIB_RATS_DIR})# 设置debug模式目标后缀
set_target_properties(iwasm PROPERTIES DEBUG_POSTFIX dbg)# 设置生成地址无关码的可执行目标或者库目标
set_target_properties(wamrc PROPERTIES POSITION_INDEPENDENT_CODE ON)# 自定义目标属性
set_target_properties(<target> PROPERTIES <custom_property_name> <value>)
二十、获取目标属性
get_target_property(<variable> <target><property>)
参数:
- variable:存储属性的变量
- target:获取属性的目标
- property:属性标识
例子:
# 获取 debug 目标文件的后缀名
get_target_property(postfix iwasm DEBUG_POSTFIX)
🌀路西法 的个人博客拥有更多美文等你来读
相关文章:
Cmake+基础命令
一、版本要求: 检查 cmake 版本号的最低要求,不满足条件时报错。 cmake_minimum_required(VERSION <version>)参数: version:最低要求的版本号 例子: # 最低要求安装3.21版本的cmake cmake_minimum_required…...
python数据分析之爬虫基础:requests详解
1、requests基本使用 1.1、requests介绍 requests是python中一个常用于发送HTTP请求的第三方库,它极大地简化了web服务交互的过程。它是唯一的一个非转基因的python HTTP库,人类可以安全享用。 1.2、requests库的安装 pip install -i https://pypi.tu…...
PHP期末复习(通过30道填空题梳理知识点)
一、基本语法 PHP的开始标记是: <?php<?php 是PHP脚本的开始标签,所有PHP代码必须在这个标签内书写。 PHP文件的结束标记是: ?>?> 是PHP脚本的结束标签,在大多数PHP文件中,通常可以省略结束标记。 定…...
PostgreSQL 安装部署系列:使用YUM 方式在Centos 7.9 安装指定 PostgreSQL -15版本数据库
一、前言 千里之行始于足下,想学习一门数据库,首先要从安装部署开始,先拥有一套属于自己的学习测试库。为了更好的学习该数据库,可以选择一个在企业界使用率比较普及的操作系统,选择稳定版本的操作系统;如果…...
知识图谱8:深度学习各种小模型
1、知识图谱的展示有很多工具 Neo4j Browser - - - - 浏览器版本 Neo4j Desktop - - - - 桌面版本 graphX - - - - 可以集成到Neo4j Desktop Neo4j 提供的 Neo4j Bloom 是用户友好的可视化工具,适合非技术用户直观地浏览图数据。Cypher 是其核心查询语言…...
为什么 JavaScript 中的 `new` 运算符报错?
在 JavaScript 中,new 运算符通常用于创建一个新对象并调用构造函数来初始化对象。然而,new 运算符可能会引发一些错误,通常是由于以下原因导致的: 构造函数没有正确的定义: 如果使用 new 运算符调用的函数没有正确地定…...
Tomcat,javaweb, servlet , springBoot
在server.xml里配置服务器 <scope>provided</scope>打包的时候,这个jar包不会被打进去,因为tomcat已将封装了这个jar包,没必要要这个...
使用Kimi开发自己的问答应用
概述 Kimi是大家常用的一个人工智能助手,本文使用Kimi开发文档,以node作为后端,开发与一个问答系统 实现效果 Kimi简介 Kimi是由Moonshot AI开发的人工智能助手,擅长中文和英文对话。目标是帮助用户解决问题、提供信息和执行任…...
TypeScript进阶
Typescript进阶 基础知识 JavaScript 的核心特点就是灵活,但随着项目规模的增大,灵活反而增加开发者的心智负担。例如在代码中一个变量可以被赋予字符串、布尔、数字、甚至是函数,这样就充满了不确定性。而且这些不确定性可能需要在代码运行…...
jenkins邮件的配置详解
Jenkins邮件的配置涉及多个步骤和细节,以下是详细的配置指南: 一、前期准备 确定邮件服务:明确Jenkins将要使用的邮件服务,如QQ邮箱、163邮箱、公司邮箱(基于Microsoft 365或Exchange Server)等。获取SMTP配置信息:根据邮件服务类型,获取相应的SMTP服务器地址、端口号…...
小皮面板(PHPSTUDY)配置多个域名或IP
问题描述 小皮面板默认采用nginx的静态部署,按照使用nginx的习惯只需要额外添加一个server即可,但是会发现直接往配置文件里添加新的server是不生效的,小皮的官网论坛几乎已经停止维护,因此资料较少,原本也没有仔细使…...
【大语言模型】LangChain LCEL 表达式语言
【大语言模型】LangChain LCEL 表达式语言 一、简介二、LCEL的优势三、LCEL 的基本使用1、Runnable 对象 四、实战实例 一、简介 LangChain LCEL 的全称为 LangChain Expression Language 即可直译为 LangChain 表达式。 为了构造更复杂的 LLM 应用并且更为简便快捷的构造 LLM…...
Leetcode 3382. Maximum Area Rectangle With Point Constraints II
Leetcode 3382. Maximum Area Rectangle With Point Constraints II 1. 解题思路2. 代码实现 题目链接:3382. Maximum Area Rectangle With Point Constraints II 1. 解题思路 这一题是题目3380. Maximum Area Rectangle With Point Constraints I的进阶版&#…...
MitelMiCollab 身份绕过导致任意文件读取漏洞复现(CVE-2024-41713)
0x01 产品描述: Mitel MiCollab 是一个企业协作平台,它将各种通信工具整合到一个应用程序中,提供语音和视频通话、消息传递、状态信息、音频会议、移动支持和团队协作功能。0x02 漏洞描述: Mitel MiCollab 的 NuPoint 统一消息 (NPM) 组件中存在身份验证绕过漏洞,由于输入…...
DVWA 靶场 SQL 注入报错 Illegal mix of collations for operation ‘UNION‘ 的解决方案
在 dvwa 靶场进行联合 SQL 注入时,遇到报错 Illegal mix of collations for operation UNION报错如下图: 解决办法: 找到文件MySQL.php 大致位置在dvwaincludesDBMS 目录下 使用编辑器打开 检索$create_db 第一个就是 在{$_DVWA[ ‘db_d…...
京准电钟分享:医院网络内NTP时间同步服务器作用是什么?
京准电钟分享:医院网络内NTP时间同步服务器作用是什么? 京准电钟分享:医院网络内NTP时间同步服务器作用是什么? 时间同步技术必定将是整个大数据处理系统的重要支撑和保障。时间同步技术使数据产生与处理系统的所有节点具有全局…...
HTML DOM API
HTMLInputElement HTMLInputElement 接口提供了特定的属性和方法,用于管理 <input> 元素的选项、布局和外观。 HTMLInputElement 和 <input> 之间的关系可以理解为接口与具体元素的关系: <input> 元素: <input> 是…...
java时间处理SimpleDateFormat详解
文章目录 常用构造函数日期格式模式常见用法1. 格式化日期2. 解析日期字符串 注意事项示例扩展:指定区域和时区 SimpleDateFormat 是 Java 中用于日期和时间格式化的类,属于 java.text 包。它允许开发者将日期对象格式化为字符串,或者将字符…...
redis-stack redisSearch环境安装搭建
RedisSearch在redis许可证变更之后显得是redis中的一大特色,闲来无事学习记录一下。 尝试通过源码编译redisSearch,貌似非常费劲,所以建议使用docker或者Linux的发行包进行安装redis-stack。redis-stack是基于redis的模块化机制进行一个扩展…...
go返回多个errors
起因 有时候大家可能需要返回多个errors的场景,所以这个时候可能就会考虑如何实现、怎么实现比较好 实现 package mainimport ("errors""fmt" )func main() {errs : retErrors("hello,world")fmt.Println(errs) }func retErrors(t…...
Monkey结合appium模拟操作特定界面
目录 1. 使用 Monkey 操作特定界面(通过UI标识来限制) 2. 结合 uiautomator 或 appium 定位特定元素 步骤: 3. 使用 Monkey Appium 控制特定界面点击 4. 如何结合 Appium 与 Monkey 5. 限制 Monkey 只点击固定界面上的元素 使用 --pc…...
Ubuntu22.04深度学习环境安装【cuda+cudnn】
为了复现一篇深度学习论文,特意安装了Linux系统。前一天已经安装Linux显卡驱动,现在需要安装cuda、cudnn等。 论文代码 论文PDF 确定包版本: 根据论文提供的代码。在requirements.txt中发现cuda版本为11.7,cudnn为8.5.0,python没…...
go语言的sdk项目搭建与git 操作标签tag并推送至远程仓库
在搭建 SDK 项目并结合 Git 操作标签(Tag)时,通常会涉及项目初始化、版本管理、Git 标签的创建与管理等内容。以下是一个完整的步骤指南,帮助您搭建 SDK 项目并学习如何使用 Git 标签。 ### 1. **搭建 SDK 项目** 首先ÿ…...
从零用java实现 小红书 springboot vue uniapp (1)
前言 偶尔会用小红书发一些笔记 闲来无事 想自己实现一个小红书 正好可以学习一下 帖子 留言 im 好友 推送 等功能 下面我们就从零 开发一个小红书 后台依旧用我们的会员系统的脚手架 演示 http://120.26.95.195:8889/ 客户端我们使用uniapp 我们首先对主页进行一个分解 顶部我…...
Python爬虫——HTML中Xpath定位
Xpath是一种路径查询语言。利用一个路径表达式从html文档中找到我们需要的数据位置,进而将其写入到本地或者数据库中。 学习Xpath爬虫,我们首先学习一下python中lxml库 关于库 lxml 终端下载Xpath需要用到的模块 pip install lxml 关于HTML 超文本标…...
电脑无法识别usb设备怎么办?电脑无法识别usb解决方法
usb设备是我们常解除的外部操作以及存储设备,它可以方便用户数据传输以及操作输入。但在使用过程中,大家基本都碰到过电脑无法识别usb设备这种情况。这种情况下,我们应该怎么办呢?下面将为你介绍几种可能的原因和解决方法…...
思特奇政·企数智化产品服务平台正式发布,助力运营商政企数智能力跃迁
数字浪潮下,产业数字化进程加速发展,信息服务迎来更广阔的天地,同时也为运营商政企支撑系统提出了更高要求。12月4日,2024数字科技生态大会期间,思特奇正式发布政企数智化产品服务平台,融合应用大数据、AI等新质生产要素,构建集平台服务、精准营销、全周期运营支撑、智慧大脑于…...
【Springboot3+vue3】从零到一搭建Springboot3+vue3前后端分离项目之前端环境搭建
【Springboot3vue3】从零到一搭建Springboot3vue3前后端分离项目之前端环境搭建 2 前端环境搭建2.1 环境准备2.2 创建Vue3项目2.3 项目搭建准备2.4 安装Element Plus2.5 安装axios2.5.1 配置(创建实例,配置请求,响应拦截器)2.5.2 …...
手写Mybatis框架源码(简写)
pom文件: springboot版本:2.6.5 jdk:8 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&q…...
Flask返回中文Unicode编码(乱码)解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...
wordpress二级栏目/网络新闻发布平台
创建文件 vi test.c 进入test.c文件 vim test.c 在Vi编辑器中存在三种模式: 命令(Command)模式 底行(Last-line)模式 编辑(Entry)模式。 用vi打开一个文件之后 进入 命令模式: 不能编辑文档,只能识别命令。 命令模式下通过 i,Ia,A,o,O 可进入…...
wordpress与新浪博客/军事最新消息
今天使用panelvar包时,显示我的R版本太低,报警告: package panelvar is not available(for R version 3.4.3)对于此类问题解决方法,可以使用以下语句来解决: source("http://bioconductor.org/biocLite.R"…...
建设中英文网站/外链网站
矩形这个元件属性的x,y就是这个元件的坐标 任何元件都是以一个矩形为背景 因此X,Y都是指坐标 当前元件就是设置动作的元件 目标元件就是动作的作用方 http://www.kne.co.kr/company/index.asp 要做的网页地址 首先,我们做这个框架 第一种方法…...
帝国cms做中英文网站/口碑营销的概念是什么
今日内容:注意: selenium驱动的浏览器是干净的,没有任何缓存。 1、selenium剩余用法 2、selenium万能登录破解 3、selenium爬取京东商品信息 4、破解极验滑动验证码 Xpath语法: 今日作业: 1、总结课堂知识点,写博客 2、爬取京东商品信息 3、滑动验证&…...
做网站 什么语言/友情链接软件
计算机一级考试理论知识也会考很多,下面是,欢迎练习。一、选择题1、下列软件中____一定是系统软件。A、自编的一个C程序,功能是求解一个一元二次方程 B、WINDOWS操作系统C、用汇编语言编写的一个练习程序 D、存储有计算机基本输入输出系统的R…...