分类目录归档:技术笔记

PowerShell命令集锦

新建软连接

New-Item -ItemType SymbolicLink -Path .\tick -Target 'D:\WorkPlace\Python\tick'

根据正则表达式删除文件

Get-ChildItem D:/WorkPlace/parquet/ $Path -Recurse -File | Where{$_.Name -Match "[A-Z]+\d{3}.parquet"} | Remove-Item
Get-ChildItem D:/Data/ -Include *连续*_*.csv -Recurse -File | Remove-Item

跳过执行策略

powershell -ExecutionPolicy Bypass -c .\Install-Software.ps1

Git配置

初始化

git config --global user.name bigtan
git config --global user.email bigtan@live.com
git config --global http.proxy http://127.0.0.1:1080

Submodule

# 示例:添加一个名为 "lib" 的子模块
git submodule add https://github.com/user/repo.git lib

# 初始化子模块(克隆后首次使用)
git submodule init

# 更新子模块到最新提交
git submodule update

# 初始化并更新所有子模块(一步完成)
git submodule update --init

# 递归初始化和更新(包含嵌套子模块)
git submodule update --init --recursive

git diff

git diff --no-index --word-diff file1.txt file2.txt


这个命令用于比较两个文件的差异,即使它们不在 Git 仓库中。


--no-index: 允许比较工作目录之外的文件,不需要 Git 仓库
--word-diff: 以单词级别显示差异,而不是行级别

SSH配置

代理配置

~/.ssh/config 文件内容

# for windows
ProxyCommand "D:\Develop\Git\mingw64\bin\connect.exe" -S 127.0.0.1:1080 -a none %h %p
# for linux
# ProxyCommand nc -X connect -x 127.0.0.1:1080 %h %p

Host github.com
  User git
  Port 22
  Hostname github.com
  TCPKeepAlive yes

Host ssh.github.com
  User git
  Port 443
  Hostname ssh.github.com
  TCPKeepAlive yes

SSH-agent

# 绑定到bash
ssh-agent bash 
# 导入私钥
ssh-add ~/.ssh/github_ed25519
ssh-add ~/.ssh/server_ed25519

CMake常用命令

项目配置

# 设置CMake最低版本要求
cmake_minimum_required(VERSION 3.10)

# 定义项目名称和版本
project(MyProject VERSION 1.0.0)

# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 设置构建类型
set(CMAKE_BUILD_TYPE Release)

变量设置

# 设置变量
set(VARIABLE_NAME "value")
set(SOURCE_FILES main.cpp util.cpp)

# 获取变量
message(STATUS "Variable value: ${VARIABLE_NAME}")

# 追加到变量
set(SOURCE_FILES ${SOURCE_FILES} new_file.cpp)

目录和路径

# 添加头文件搜索路径
include_directories(include)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)

# 添加库文件搜索路径
link_directories(lib)

# 添加子目录
add_subdirectory(src)
add_subdirectory(tests)

可执行文件和库

# 创建可执行文件
add_executable(myapp main.cpp)

# 创建静态库
add_library(mylib STATIC lib.cpp)

# 创建动态库
add_library(mylib SHARED lib.cpp)

# 创建头文件库(接口库)
add_library(mylib INTERFACE)

链接和依赖

# 链接库到目标
target_link_libraries(myapp mylib)
target_link_libraries(myapp pthread)

# 设置目标属性
set_target_properties(myapp PROPERTIES
    CXX_STANDARD 17
    CXX_STANDARD_REQUIRED ON
)

# 添加头文件包含路径(推荐方式)
target_include_directories(myapp PRIVATE include)
target_include_directories(myapp PUBLIC include)

查找包和库

# 查找系统包
find_package(OpenCV REQUIRED)
find_package(Boost REQUIRED COMPONENTS system filesystem)

# 查找库文件
find_library(MATH_LIB m)

# 查找头文件
find_path(HEADER_PATH myheader.h)

# 使用找到的包
target_link_libraries(myapp ${OpenCV_LIBS})

编译选项

# 添加编译选项
add_compile_options(-Wall -Wextra)

# 针对特定目标添加编译选项
target_compile_options(myapp PRIVATE -O2)

# 添加预处理器定义
add_definitions(-DDEBUG)
target_compile_definitions(myapp PRIVATE DEBUG=1)

文件操作

# 获取文件列表
file(GLOB SOURCES "src/*.cpp")
file(GLOB_RECURSE HEADERS "include/*.h")

# 复制文件
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/config.txt 
     DESTINATION ${CMAKE_CURRENT_BINARY_DIR})

# 创建目录
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/output)

条件语句

# if语句
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
    add_definitions(-DDEBUG)
endif()

# if-else语句
if(WIN32)
    set(PLATFORM "Windows")
elseif(APPLE)
    set(PLATFORM "macOS")
else()
    set(PLATFORM "Linux")
endif()

循环

# foreach循环
set(ITEMS a b c)
foreach(item ${ITEMS})
    message(STATUS "Item: ${item}")
endforeach()

# 遍历文件
file(GLOB FILES "*.cpp")
foreach(file ${FILES})
    message(STATUS "File: ${file}")
endforeach()

函数和宏

# 定义函数
function(my_function arg1 arg2)
    message(STATUS "Args: ${arg1}, ${arg2}")
endfunction()

# 调用函数
my_function("hello" "world")

# 定义宏
macro(my_macro arg)
    set(${arg} "processed")
endmacro()

安装配置

# 安装可执行文件
install(TARGETS myapp 
        RUNTIME DESTINATION bin)

# 安装库文件
install(TARGETS mylib
        ARCHIVE DESTINATION lib
        LIBRARY DESTINATION lib)

# 安装头文件
install(FILES myheader.h
        DESTINATION include)

# 安装目录
install(DIRECTORY include/
        DESTINATION include)

测试

# 启用测试
enable_testing()

# 添加测试
add_test(NAME test1 COMMAND myapp --test)
add_test(NAME test2 COMMAND test_runner)

# 设置测试属性
set_tests_properties(test1 PROPERTIES TIMEOUT 30)

生成器表达式

target_compile_options(myapp PRIVATE
    $<$<CONFIG:Debug>:-g -O0>
    $<$<CONFIG:Release>:-O3>
)

# 根据编译器设置选项
target_compile_options(myapp PRIVATE
    $<$<CXX_COMPILER_ID:GNU>:-Wall>
    $<$<CXX_COMPILER_ID:MSVC>:/W3>
)

调试和信息输出

# 输出消息
message(STATUS "This is a status message")
message(WARNING "This is a warning")
message(FATAL_ERROR "This is a fatal error")

# 打印变量
message(STATUS "CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}")
message(STATUS "PROJECT_SOURCE_DIR: ${PROJECT_SOURCE_DIR}

常用内置变量

# 项目相关
${PROJECT_NAME}           # 项目名称
${PROJECT_VERSION}        # 项目版本
${PROJECT_SOURCE_DIR}     # 项目源码目录
${PROJECT_BINARY_DIR}     # 项目构建目录

# 当前目录
${CMAKE_CURRENT_SOURCE_DIR}  # 当前源码目录
${CMAKE_CURRENT_BINARY_DIR}  # 当前构建目录

# 编译器相关
${CMAKE_CXX_COMPILER}     # C++编译器
${CMAKE_BUILD_TYPE}       # 构建类型
${CMAKE_SYSTEM_NAME}      # 系统名称

常用构建命令

# 创建构建目录
mkdir build && cd build

# 配置项目
cmake ..
cmake -DCMAKE_BUILD_TYPE=Release ..

# 编译项目
cmake --build .
cmake --build . --config Release

# 安装项目
cmake --install .

# 运行测试
ctest

这些命令覆盖了CMake的大部分常用功能,足以应对大多数项目的构建需求。

UV常见配置

astral-sh/uv: An extremely fast Python package and project manager, written in Rust.

[pip]
index-url = "https://mirrors.aliyun.com/pypi/simple/"
[tool.uv]
index-url = "https://mirrors.aliyun.com/pypi/simple/"

[tool.uv.sources]
torch = [
    { index = "pytorch-cpu" },
]
torchvision = [
    { index = "pytorch-cpu" },
]

[[tool.uv.index]]
name = "pytorch-cpu"
url = "https://download.pytorch.org/whl/cpu"
explicit = true

更新Python版本

uv python upgrade

更新所有依赖

uv sync -U