cmake:test project
本文主要探讨cmake在测试和项目中的应用。
add_test
add_test(NAME <name> COMMAND <command> [<arg>...]
[CONFIGURATIONS <config>...] [WORKING_DIRECTORY <dir>]
[COMMAND_EXPAND_LISTS]) add_test(NAME test_uni COMMAND $<TARGET_FILE:${PROJECT_NAME}> 1)
添加测试
main函数返回值0成功
set_tests_properties(test PROPERTIES PASS_REGULAR_EXPRESSION "0" )
set_tests_properties(test PROPERTIES FAIL_REGULAR_EXPRESSION "-1")
PASS_REGULAR_EXPRESSION
成功输出
FAIL_REGULAR_EXPRESSION
失败输出
设置成功/失败输出匹配
set_tests_properties(test PROPERTIES TIMEOUT 2)
设置超时
enable_testing()
使能测试
execute_process(COMMAND shell)
执行shell
ctest -V --output-junit results.xml
详细输出结果为xml文件
FetchContent
cmake版本大于3.14
include(FetchContent)
导入FetchContent
FetchContent_Declare(
<项目名称> # 自定义名称
GIT_REPOSITORY <仓库URL> # 仓库的URL
GIT_TAG <标签或分支> # 使用的标签或分支
)
下载模块
FetchContent_MakeAvailable(<项目名称>)
使用项目
add_dependencies
add_dependencies(target-name depend-target1 [depend-target2 ...])
设置目标(如可执行文件、库或自定义目标)之间的依赖关系
demo1:
add_test & gtest
文件目录
代码示例
run.sh
#!/bin/bash
#
# sh run.sh 1 ==> compile install gooletest
#
# sh run.sh 0 ==> FetchCotent install gooletest
#cmake -S . -B build -D COMP_INSTALL=${1} cmake --build buildecho -e "==================================\n"cd build && ctest -V --output-junit ../results.xmlcd ..
clean.sh
#!/bin/bashrm -rf build lib include gooletest release-1.11.0.tar.gz Testing results.xml
CMakeLists.txt
cmake_minimum_required(VERSION 3.0)project(test)#ctestadd_executable(ctests ctest.cpp)add_test(NAME ctest_test_sucess COMMAND ctests sucess)add_test(NAME ctest_test_fail COMMAND ctests)set_tests_properties(ctest_test_sucess PROPERTIES PASS_REGULAR_EXPRESSION "sucess" )#gooletestif(COMP_INSTALL)message("compile install gooletest")if(NOT EXISTS release-1.11.0.tar.gz)execute_process(COMMAND wget http://cdn.tarsyun.com/src/release-1.11.0.tar.gz)endif()if(NOT EXISTS gooletest)execute_process(COMMAND mkdir gooletest)endif()set(UNTAR_FILE ${CMAKE_SOURCE_DIR}/gooletest)set(COM_PUT ${CMAKE_SOURCE_DIR}/gooletest/googletest-release-1.11.0/build)execute_process(COMMAND tar -zxf release-1.11.0.tar.gz -C ${UNTAR_FILE})execute_process(COMMAND ${CMAKE_COMMAND} -S ${UNTAR_FILE}/googletest-release-1.11.0 -B ${COM_PUT})execute_process(COMMAND ${CMAKE_COMMAND} --build ${COM_PUT})execute_process(COMMAND ${CMAKE_COMMAND} --install ${COM_PUT} --prefix=${CMAKE_SOURCE_DIR})set(CMAKE_PREFIX_PATH ${CMAKE_SOURCE_DIR}/lib/cmake/)find_package(GTest)else()#gtest(FetchContent)message("FetchContent install gooletest")include(FetchContent)FetchContent_Declare(googletestURL http://cdn.tarsyun.com/src/release-1.11.0.tar.gz)FetchContent_MakeAvailable(googletest)endif()add_executable(gtests gtest.cpp)target_link_libraries(gtests GTest::gtest_main)include(GoogleTest)gtest_discover_tests(gtests)enable_testing()
gtest.cpp
#include <gtest/gtest.h>TEST(Test,TestDownload)
{EXPECT_EQ(2*7,14);
}int main(int argc,char *argv[])
{//初始化gtesttesting::InitGoogleTest(&argc,argv);return RUN_ALL_TESTS();
}
ctest.cpp
#include <iostream>int main(int argc, char *argv[])
{if(argc <= 1){std::cout << "ex: ctests param" << std::endl;return -1;}std::cout << "param : " << argv[1] << std::endl;return 0;
}
结果示例
sh run.sh 1
sh run.sh
sh clean.sh
demo2:
test project
文件目录
run.sh
#!/bin/bashout=${1}cmake -S . -B ${out}cmake --build ${out}cd ${out} && make install && cd ..echo "=================Math=============="$(pwd)/bin/Math_testecho "=================Thread==========="$(pwd)/bin/Thread_testecho "=================unit Thread test ==========="$(pwd)/${out}/src/Math/unit_test_Math/Math_unit_testecho "=================unit Math test ==========="$(pwd)/${out}/src/Thread/unit_test_Thread/Thread_unit_test
clean.sh
#!/bin/bashout=${1}rm -rf ${out} bin lib include
CMakeLists.txt
###############
#
# cmake_project
#
##############cmake_minimum_required(VERSION 3.0)project(cmake_project)option(BUILD_MATH "" ON)option(BUILD_THREAD "" ON)option(BUILD_SAMPLES "" ON)option(BUILD_UNIT_TEST "" ON)if(BUILD_MATH)add_subdirectory(src/Math)
endif()if(BUILD_THREAD)add_subdirectory(src/Thread)
endif()if(BUILD_SAMPLES)add_subdirectory(src/samples)#添加依赖add_dependencies(Thread_test Thread)add_dependencies(Math_test Math)
endif()if(BUILD_UNIT_TEST)enable_testing()add_subdirectory(src/Math/unit_test_Math)add_subdirectory(src/Thread/unit_test_Thread)
endif()
root@kaxi-virtual-machine:~/cmake_project#
root@kaxi-virtual-machine:~/cmake_project#
root@kaxi-virtual-machine:~/cmake_project# cat CMakeLists.txt
###############
#
# cmake_project
#
##############cmake_minimum_required(VERSION 3.0)project(cmake_project)option(BUILD_MATH "" ON)option(BUILD_THREAD "" ON)option(BUILD_SAMPLES "" ON)option(BUILD_UNIT_TEST "" ON)if(BUILD_MATH)add_subdirectory(src/Math)
endif()if(BUILD_THREAD)add_subdirectory(src/Thread)
endif()if(BUILD_SAMPLES)add_subdirectory(src/samples)#添加依赖add_dependencies(Thread_test Thread)add_dependencies(Math_test Math)
endif()if(BUILD_UNIT_TEST)enable_testing()add_subdirectory(src/Math/unit_test_Math)add_subdirectory(src/Thread/unit_test_Thread)
endif()
common.cmake
###########
#
# common.cmake
#
###########设置bin,lib路径
set(RUNTIME_DIR ${CMAKE_CURRENT_LIST_DIR}/../bin)
set(LIBRARY_DIR ${CMAKE_CURRENT_LIST_DIR}/../lib)#项目顶层目录
set(TOP_DIR "/root/cmake_project")#获取源码和头文件
macro(get_src_include)#获取源码aux_source_directory(${CMAKE_CURRENT_LIST_DIR} SRC)#获取头文件FILE(GLOB H_FILE ${CMAKE_CURRENT_LIST_DIR}/include/*.h ${CMAKE_CURRENT_LIST_DIR}/include/../*.h)
endmacro()#配置编译参数
macro(set_config param)#设置头文件查找路径target_include_directories(${name} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/include ${CMAKE_CURRENT_LIST_DIR}/../include)#配置参数target_compile_features(${name} PRIVATE cxx_std_11)#debug/release配置if(CMAKE_BUILD_TYPE STREQUAL "")set(CMAKE_BUILD_TYPE DEBUG)endif()#设置输出路径set_target_properties(${name} PROPERTIESRUNTIME_OUTPUT_DIRECTORY ${RUNTIME_DIR} #exeLIBRARY_OUTPUT_DIRECTORY ${LIBRARY_DIR} #.so ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_DIR} #.a
)#设置debug标识set_target_properties(${name} PROPERTIES BEBUG_POSTFIX "d")#添加库路径target_link_directories(${name} PRIVATE ${LIBRARY_DIR})
endmacro()#单元测试
include(${CMAKE_CURRENT_LIST_DIR}/gtest.cmake)
function(moudle_test name)#构建gtestsetup_gtest()#获取模块单元测试源码get_src_include()# 获取模块源码aux_source_directory(${CMAKE_CURRENT_LIST_DIR} TEST_SRC)list(APPEND SRC ${TEST_SRC})#生成可执行程序add_executable(${name} ${SRC} ${H_FILE})#设置头文件查找路径target_include_directories(${name} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/../include)#连接gtest库target_link_libraries(${name} GTest::gtest_main)#链库math(EXPR size "${ARGC} - 1")if(size GREATER 0)foreach(i RANGE 1 ${size})target_link_libraries(${name} ${ARGV${i}})endforeach()endif()#联合ctest和gtestinclude(GoogleTest)gtest_discover_tests(${name})#使能ctestenable_testing()
endfunction()#编译可执行程序
function(compile_exe name)#获取源码和头文件get_src_include()#编译生成可执行程序add_executable(${name} ${SRC} ${H_FILE})#设置编译配置set_config(${name})#链库math(EXPR size "${ARGC} - 1")if(size GREATER 0)foreach(i RANGE 1 ${size})target_link_libraries(${name} ${ARGV${i}})endforeach()endif()
endfunction()#库配置
function(project_lib name)#静态/动态库配置string(TOUPPER ${name} NAME)option(${NAME}_SHARED "OFF is static lib" ON)if(${NAME}_SHARED)set(TYPE SHARED)else()set(TYPE STATIC)endif()#获取源码和头文件get_src_include()#生成库add_library(${name} ${TYPE} ${SRC} ${H_FILE})#设置编译配置set_config(${name})#安装lib/include/binset(version 1.0)set_target_properties(${name} PROPERTIES PUBLIC_HEADER ${H_FILE})install(TARGETS ${name} EXPORT ${name}RUNTIME DESTINATION ${TOP_DIR}/binLIBRARY DESTINATION ${TOP_DIR}/libPUBLIC_HEADER DESTINATION ${TOP_DIR}/include)#安装pakage的配置文件install(EXPORT ${name} FILE ${name}Config.cmake DESTINATION ${TOP_DIR}/lib/config/${name}-${version})#版本文件set(CONF_VER_FILE ${TOP_DIR}/../../lib/conf/${name}-${version}/${name}ConfigVersion.cmake)include(CMakePackageConfigHelpers)write_basic_package_version_file(${CONF_VER_FILE} VERSION ${version}COMPATIBILITY SameMajorVersion # 主版本兼容)#安装版本配置文件install(FILES ${CONF_VER_FILE}DESTINATION ${TOP_DIR}/lib/config/${name}-${version})
endfunction()
gtest.cmake
###########
#
# gtest
#
##########macro(setup_gtest)#gtest(FetchContent)message("FetchContent install gooletest")include(FetchContent)FetchContent_Declare(googletestURL http://cdn.tarsyun.com/src/release-1.11.0.tar.gz)FetchContent_MakeAvailable(googletest)
endmacro()
Thread/CMakeLists.txt
##############
#
# Thread
#
#############cmake_minimum_required(VERSION 3.0)project(Thread)include(${CMAKE_CURRENT_LIST_DIR}/../../cmake/common.cmake)project_lib(${PROJECT_NAME})
Thread.h
#ifndef __THREAD__H__
#define __THREAD__H__ #include <thread>class Thread
{public:virtual void start_pthread();virtual void wait_pthread();virtual void pthread_task() = 0;private:std::thread th;
};#endif
Thread.cpp
#include <iostream>
#include "Thread.h"void Thread::start_pthread()
{std::cout << " start pthread" << std::endl;th = std::thread(&Thread::pthread_task,this);
}void Thread::wait_pthread()
{th.join();
}
unit_test_Thread/CMakeLists.txt
#####################
#
# Thread unit test
#
####################cmake_minimum_required(VERSION 3.0)project(Thread_unit_test)include(${CMAKE_CURRENT_LIST_DIR}/../../../cmake/common.cmake)moudle_test(${PROJECT_NAME} Thread)enable_testing()
unit_test_Thread.cpp
#include <iostream>
#include <chrono>
#include <thread>
#include "Thread.h"
#include "gtest/gtest.h"class Task: public Thread
{public:Task(int num):num(num){};void pthread_task(){std::cout << "num : " << num << std::endl;}private:unsigned int num;
};TEST(Test_Thread,test_Thread)
{Task t(1);t.start_pthread();t.wait_pthread();
}int main()
{std::cout << "=================unit test thread start=================";testing::InitGoogleTest();return RUN_ALL_TESTS();std::cout << "=================unit test thread end=================";
}
Math/CMakeLists.txt
############
#
# Math
#
###########cmake_minimum_required(VERSION 3.0)project(Math)include(${PROJECT_SOURCE_DIR}/../../cmake/common.cmake)project_lib(${PROJECT_NAME})
Math.h
#ifndef __MATH_H__
#define __MATH_H__
class Math
{public:Math(){};Math(int num_1, int num_2):num_1(num_1),num_2(num_2){};void get_num();void set_num(int num_1, int num_2);int add_num();int dec_num();private:int num_1;int num_2;
};#endif
Math.cpp
#include <iostream>
#include "Math.h"int Math::add_num()
{return num_1 + num_2;
}int Math::dec_num()
{return num_1 - num_2;
}void Math::get_num()
{std::cout << "num_1:" << num_1 << std::endl;std::cout << "num_2:" << num_2 << std::endl;
}void Math::set_num(int num_1, int num_2)
{this->num_1 = num_1;this->num_2 = num_2;
}
unit_test_Math/CMakeLists.txt
#################
#
# Math unit test
#
################cmake_minimum_required(VERSION 3.0)project(Math_unit_test)include(${CMAKE_CURRENT_LIST_DIR}/../../../cmake/common.cmake)moudle_test(${PROJECT_NAME} Math)enable_testing()
unit_test_Math.cpp
#include <iostream>
#include "Math.h"
#include "gtest/gtest.h"TEST(Math_test, Init_Math)
{Math m;m.set_num(1,2);m.get_num();
}TEST(Math_test_add, Math_Add)
{Math m;m.set_num(1,2);ASSERT_EQ(m.add_num(),3);
}TEST(Math_test_, Math_Add)
{Math m;m.set_num(1,2); ASSERT_EQ(m.dec_num(),-1);
}int main()
{std::cout << "=================unit test math start=================";testing::InitGoogleTest();return RUN_ALL_TESTS();std::cout << "=================unit test math end=================";
}
samples/CMakeLists.txt
#####################
#
# samples
#
####################cmake_minimum_required(VERSION 3.0)project(samples)file(GLOB dirs LIST_DIRECTORIES true ${CMAKE_CURRENT_LIST_DIR}/*)set(samp)foreach(dir IN LISTS dirs)if(EXISTS ${dir}/CMakeLists.txt)list(APPEND samp ${dir})endif()
endforeach()foreach(s IN LISTS samp)add_subdirectory(${s})
endforeach()
test_Math/CMakeLists.txt
########################
#
# Math test
#
#######################cmake_minimum_required(VERSION 3.0)project(Math_test)include(${CMAKE_CURRENT_LIST_DIR}/../../../cmake/common.cmake)compile_exe(${PROJECT_NAME} Math)target_include_directories(${PROJECT_NAME} PRIVATE "../../Math/include")
test_Math.cpp
#include <iostream>
#include "Math.h"int main()
{std::cout << "===============test Math start=============";Math m(1,2);m.get_num();std::cout << "1 + 2 = " << m.add_num() << std::endl;std::cout << "1 - 2 = " << m.dec_num() << std::endl;m.set_num(2,1);m.get_num(); std::cout << "2 + 1 = " << m.add_num() << std::endl; std::cout << "2 - 1 = " << m.dec_num() << std::endl; std::cout << "===============test Math end=============";return 0;
}
test_Thread/CMakeLists.txt
########################
#
# Thread test
#
#######################cmake_minimum_required(VERSION 3.0)project(Thread_test)include(${CMAKE_CURRENT_LIST_DIR}/../../../cmake/common.cmake)compile_exe(${PROJECT_NAME} Thread)target_include_directories(${PROJECT_NAME} PRIVATE "../../Thread/include")
test_Thread.cpp
#include <iostream>
#include <chrono>
#include <thread>
#include "Thread.h"class Task: public Thread
{public:Task(int num):num(num){};void pthread_task(){std::cout << "num :" << num << std::endl;}private:unsigned int num;
};int main()
{Task t(1);t.start_pthread();t.wait_pthread();return 0;
}
编译运行结果
编译清理结果
相关文章:
cmake:test project
本文主要探讨cmake在测试和项目中的应用。 add_test add_test(NAME <name> COMMAND <command> [<arg>...] [CONFIGURATIONS <config>...] [WORKING_DIRECTORY <dir>] [COMMAND_EXPAND_LISTS]) add_test(NAME test_uni COMMAND $<TARGET_F…...
Qwen-2.5 omni
问题1 Qwen2.5-Omni的主要功能是什么? Qwen2.5-Omni的主要功能是处理和生成多种模态的数据,包括文本、图像、音频和视频。它能够同时理解和生成这些模态的信息,支持复杂的多模态任务,例如语音对话、视频理解、图像描述生成等。 …...
Problem D: 异常2
1.题目描述 检查危险品程序:生成货物类、机器类,货物类有属性name,机器类有检测的check方法,若货物名称是炸弹、毒药、刀具,则抛出异常提示。 代码如下: import java.util.Scanner; class goods{ Stri…...
AI智慧公园管理方案:用科技重塑市民的“夜游体验”
AI智慧公园管理方案:多场景智能巡检与安全防控 一、背景与痛点分析 夏季夜间,公园成为市民休闲娱乐的核心场所,但管理难度随之激增: 宠物管理失控:未牵绳宠物进入园区,随地排泄、惊扰游客,甚…...
AJAX原理
AJAX使用XHR 对象和服务器进行数据交互 XHR <p class"my-p"></p><script>const xhr new XMLHttpRequest()xhr.open(GET,http://hmajax.itheima.net/api/province)xhr.addEventListener(loadend,()>{// console.log(xhr.response)const data …...
内存泄露,如何判断是资源泄露还是堆栈泄露?
作为软件测试工程师,判断内存泄露类型对于定位和解决问题至关重要。以下是区分资源泄露和堆栈泄露的方法: 1. 基本概念区分 资源泄露(Resource Leak): 指非内存资源未正确释放,如文件句柄、数据库连接、网络套接字等 虽然不直接表现为Java堆内存增长,但会导致系统资源耗…...
无人甘蔗小车履带式底盘行走系统的研究
1.1 研究背景与意义 1.1.1 研究背景 甘蔗作为全球最重要的糖料作物之一,在农业经济领域占据着举足轻重的地位。我国是甘蔗的主要种植国家,尤其是广西、广东、云南等地,甘蔗种植面积广泛,是当地农业经济的重要支柱产业。甘蔗不仅…...
Redis设计与实现——单机Redis实现
RedisDB RedisDB的核心结构 键空间(dict*dict) 结构:哈希表(字典),键为字符串对象(SDS),值为 Redis 对象(字符串、列表、哈希等)。 功能&#x…...
ES C++客户端安装及使用
介绍 Elasticsearch , 简称 ES ,它是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源&…...
C++学习之STL学习
在经过前面的简单的C入门语法的学习后,我们开始接触C最重要的组成部分之一:STL 目录 STL的介绍 什么是STL STL的历史 UTF-8编码原理(了解) UTF-8编码原理 核心编码规则 规则解析 编码步骤示例 1. 确定码点范围 2. 转换为…...
【东枫科技】使用LabVIEW进行NVIDIA CUDA GPU 开发
文章目录 工具包 CuLab - LabVIEW 的 GPU 工具包特性和功能功能亮点类似 LabVIEW 的 GPU 代码开发支持的功能数值类型和维数开发系统要求授权售价 工具包 CuLab - LabVIEW 的 GPU 工具包 CuLab 是一款非常直观易用的 LabVIEW 工具包,旨在加速 Nvidia GPU 上的计算密…...
LangChain对话链:打造智能多轮对话机器人
LangChain对话链:打造智能多轮对话机器人 目录 LangChain对话链:打造智能多轮对话机器人ConversationChain 是什么核心功能与特点基本用法示例内存机制自定义提示词应用场景与其他链的结合`SequentialChain` 是什么 硬件组成: NodeMC…...
HTML12:文本框和单选框
表单元素格式 属性说明type指定元素的类型。text、password、 checkbox、 radio、submit、reset、file、hidden、image 和button,默认为textname指定表单元素的名称value元素的初始值。type为radio时必须指定一个值size指定表单元素的初始宽度。当type为text 或pas…...
JVM规范之运行时数据区域
JVM运行时数据区 前言为什么要阅读jvm规范?阅读本篇文章可以学习到啥? 正文概述JVM线程私有的运行时数据区pc(program counter) RegisterJVM StackNative Method Stack JVM线程共享的运行时数据区HeapMethod AreaRun-time constant pool 总结参考链接 前…...
LVGL(lv_btnmatrix矩阵按钮)
文章目录 🔧 1. 基本概念📌 lv\_btnmatrix 是什么? 🧱 2. 基本结构和用法✅ 创建按钮矩阵✅ 设置按钮文字 🧰 3. 设置按钮行为🔄 4. 响应按钮点击🎨 5. 自定义样式📌 6. 使用技巧&am…...
AUTOSAR图解==>AUTOSAR_TR_AIDesignPatternsCatalogue
AUTOSAR 人工智能设计模式目录 AUTOSAR传感器执行器与仲裁设计模式的深入解析与图解 目录 简介传感器和执行器模式 架构概述组件结构交互流程应用场景 多请求者或提供者之间的仲裁模式 架构概述组件结构仲裁流程应用场景 总结 1. 简介 AUTOSAR(AUTomotive Open Sy…...
英语时态--中英文对“时间”的不同理解
文章目录 中英文时间上的差异我现在正在休息一般现在时1. 经常发生的动作2. 表客观事实3. 表示现在的状态一般将来时1. will2. be going to含义1:打算在将来某时做某事含义2:某事预计要发生而且不可避免中英文时间上的差异 我现在正在休息 “我现在正在休息。”用英文怎么说…...
Linux基础开发工具一(yum/apt ,vim)
前言 Linux下,如何进行软件安装,查找,卸载 1.源代码安装 2. rpm安装方式,安装包的本质,就是把源代码在Linux下编译好,然后打包(别人把自己编译好的软件打包给你让你去安装) 上面…...
Java 线程池原理
Java 线程池是一种管理和复用线程的机制,其原理如下: 核心概念 线程池的初始化 :在创建线程池时,需要设置一些关键参数,如核心线程数(corePoolSize)、最大线程数(maximumPoolSize&am…...
AJAX 使用 和 HTTP
ajax学习 promise和 awit Node.js 和 webpack 前端工程化 Git工具 AJAX异步的JS和XML: 使用XML对象和服务器通信 在这里插入图片描述 统一资源定位符 URL HTTP 超文本传输协议 域名 资源路径 资源目录和类型 URL 查询参数 使用?表示之后的参数…...
mem0跟Memgraph交互
目录 1. 安装和设置2. 配置连接3. 使用 mem0 进行交互4. 添加和查询数据5. 代码运行结果 1. 安装和设置 首先,确保你已经安装了 Memgraph 和 mem0 库。你可以使用 pip 来安装 mem0: uv pip install "mem0ai[graph]" uv pip install langchai…...
httpclient请求出现403
问题 httpclient请求对方服务器报403,用postman是可以的 解决方案: request.setHeader( “User-Agent” ,“Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0” ); // 设置请求头 原因: 因为没有设置为浏览器形式&#…...
验证码与登录过程逻辑学习总结
目录 前言 一、验证码与登录 二、使用步骤 1.先apipost测试一波 2.先搞验证码 3.跨域问题 4.后端走起 总结 前言 近期要做一个比较完整的demo,需要自己做一个前端登录页面,不过api接口都是现成的,一开始以为过程会很easy,…...
openai接口参数max_tokens改名max-completion-tokens?
文章目录 关于max_tokens参数max_tokens改max-completion-tokens?控制 OpenAI 模型响应的长度 关于max_tokens参数 大模型 API(比如 OpenAI、DeepSeek、Moonshot 等)都是按照“Token 数量”来计费。 控制内容:控制一次请求返回的…...
【办公类-39-07】20250511批量生成通义万相图片(七)彩色背景蝴蝶-筛选无黑无白的图片
制作了教师裁剪的拼图块后,发现如果图案上有黑色,就没法看清出凹凸角,剪起来有误差 所以黑色也要剔除 通义万相下载的彩色蝴蝶有彩色背景的图片,放弃有白色和黑色图案的图片,保留彩色图案的蝴蝶 deepseek、阿夏 20250…...
容器技术 20 年:颠覆、重构与重塑软件世界的力量
目录 容器技术发展史 虚拟化技术向容器技术转变 Docker的横空出世 容器编排技术与Kubernetes 微服务的出现与Istio 工业标准的容器运行时 容器技术与 DevOps 的深度融合 无服务架构推波助澜 展望未来发展方向 从 20 世纪硬件虚拟化的笨重,到操作系统虚拟…...
Docker 部署 - Crawl4AI 文档 (v0.5.x)
Docker 部署 - Crawl4AI 文档 (v0.5.x) 快速入门 🚀 拉取并运行基础版本: # 不带安全性的基本运行 docker pull unclecode/crawl4ai:basic docker run -p 11235:11235 unclecode/crawl4ai:basic# 带有 API 安全性启用的运行 docker run -p 11235:1123…...
在C++中,符号位是否参与位运算
在C中,符号位是否参与位运算取决于具体的运算符和数据类型。以下是详细解释: 1. 按位与(&)、按位或(|)、按位异或(^) 规则:这些运算符会处理包括符号位在内的所有二…...
【计算机网络】NAT技术、内网穿透与代理服务器全解析:原理、应用及实践
📚 博主的专栏 🐧 Linux | 🖥️ C | 📊 数据结构 | 💡C 算法 | 🅒 C 语言 | 🌐 计算机网络 上篇文章:以太网、MAC地址、MTU与ARP协议 下篇文章:五种IO模型与阻…...
redis数据结构-08(SINTER、SUNION、SDIFF、SISMEMBER)
集合运算:SINTER、SUNION、SDIFF、SISMEMBER Redis 集合是一种功能强大的数据结构,可用于存储一组唯一元素。本课基于上一课对 Redis 集合的介绍,深入探讨了使 Redis 集合如此多功能的基本集合操作: SINTER 、 SUNION 、 SDIFF 和…...
大模型都有哪些超参数
大模型的超参数是影响其训练效果、性能和泛化能力的关键设置,可分为以下几大类别并结合实际应用进行详细说明: 一、训练过程相关超参数 学习率(Learning Rate) 作用:控制参数更新的步长,直接影响收敛速度和稳定性。过高会导致震荡或过拟合,过低则收敛缓慢。调整策略:初…...
【更新至2023年】1999-2023年上市公司人工智能词频统计数据(年报词频统计)
【更新至2023年】1999-2023年上市公司人工智能词频统计数据(年报词频统计) 1、时间:1999-2023年 2、来源:上市公司年报 3、指标:股票代码、公司简称、年报标题、年份、行业名称、行业代码、全文-文本总长度、仅中英…...
通过 Azure DevOps 探索 Helm 和 Azure AKS
俗话说:“慷慨之人必昌盛;滋润他人者,必得滋润。” 如果您觉得这篇文章对您有有所帮助,请点赞,关注,转发! 前言 在不断发展的云计算世界中,应用程序的无缝部署和管理至关重要。Azu…...
Go语言标识符
文章目录 标识符的组成规则Go语言关键字预定义标识符标识符命名惯例 特殊标识符标识符访问权限控制 在Go语言中,标识符(Identifier)是用来命名变量、函数、类型、常量等程序实体的名称。 标识符的组成规则 1、必须以字母或下划线(_)开头: 字母包括Unico…...
Spring Cloud : OpenFeign(远程调用)
RestTemplate虽然比直接用HTTPClient简单的多,但是还是存在着许多的问题,比如url拼接麻烦,容易出错,并且可读性很差 public OrderDetail selectOrderById(Integer orderId){OrderDetail orderDetail orderMapper.selectOrderById…...
JVM内存结构有哪些?HashMap和HashTable的区别?
JVM内存结构 JVM内存主要分为以下几个区域: 程序计数器(Program Counter Register) 线程私有,记录当前线程执行的字节码行号指示器 唯一一个不会出现OOM的内存区域 Java虚拟机栈(Java Virtual Machine Stacks) 线程私有,生命周期与线程相…...
三维空间中的组织行为映射:MATLAB 数据插值可视化技术
在组织行为学研究中,如何直观呈现多维变量之间的关系一直是个挑战。今天我们将深入解析一段 MATLAB 代码,看看如何通过数据插值和三维可视化技术,将抽象的组织行为数据转化为直观的三维曲面图,揭示组织自尊 (OBSE)、牺牲性领导 (SSL) 与责任感知 (FO) 之间的复杂关系。 �…...
ImportError: DLL load failed: 找不到指定的程序。
查看其他博客说是缺少libssl-1_1-x64.dll 和 libcrypto-1_1-x64.dll 然后去下载放到博客说的目录下 没有用 解决不了一点 OpenSSL for Windows 64位 完整安装包 在这里 项目地址: https://gitcode.com/open-source-toolkit/eb627 注意事项 此安装包仅适用于64位Windows系…...
计算机的三个根本性基础
1. 计算机是执行输入、运算、输出的机器 从硬件上看,计算机是执行输入、运算、输出的机器,计算机的硬件由大量的IC(Integrated Circuit,集成电路)组成。 IC会在其中内部对外部输入的信息进行运算,并把运算…...
C++ Builder XE 使用DevMode设置打印机的自定义纸张,打印方向
代码功能介绍(以备以后查询):该代码片段展示了如何将TPanel控件的内容作为图像打印出来。首先,代码创建了一个与TPanel大小相同的位图,并通过BitBlt函数将TPanel的内容复制到位图中。接着,代码配置打印机,设…...
QOwnNotes:功能强大的跨平台笔记应用程序
QOwnNotes是一款功能强大的跨平台笔记应用程序,专为追求高效、灵活笔记管理的用户设计。它不仅支持Windows、macOS和Linux等多种操作系统,还提供了丰富的功能,帮助用户轻松管理笔记、任务和清单。无论是日常记录、学习笔记还是工作计划&#…...
深入理解反序列化攻击:原理、示例与利用工具实战
反序列化漏洞是现代 Web 安全中的一个高危攻击类型,常常导致远程代码执行(RCE)、文件读写、身份伪造等严重后果。本文将从基础原理讲起,结合实际代码和工具(PHPGGC、ysoserial)演示反序列化攻击的完整过程。…...
【今日三题】素数回文(模拟) / 活动安排(区间贪心) / 合唱团(动态规划)
⭐️个人主页:小羊 ⭐️所属专栏:每日两三题 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 素数回文(模拟)活动安排(区间贪心)合唱团(动态规划) 素数回文(模拟) 素数回文 #include <iostream> #include <st…...
一文了解B+树的删除原理
1. B树的核心特性回顾 B树是一种广泛应用于数据库和文件系统的平衡多路搜索树,其核心特性包括: 阶数(m):定义每个节点最多拥有的子节点数(或键数)节点容量规则: 根节点:…...