Init commit
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
# 请将此文件加入.gitignore
|
||||
# 在此文件配置对应的库的路径
|
||||
|
||||
##### 填写一些库的地址,如果填错了将关闭相关模块 #####
|
||||
#1. VCPKG库的根目录
|
||||
set(PATH_VCPKG "")
|
||||
#2. OpenSSL库的根目录
|
||||
set(PATH_SSL "")
|
||||
#3. ZLIB库的根目录
|
||||
set(PATH_ZLIB "")
|
||||
#4. libcurl库的根目录
|
||||
set(PATH_CURL "")
|
||||
#5. opencv库的根目录
|
||||
set(PATH_OPENCV "")
|
||||
#6. QT库目录,如 C:/Qt/6.8.1/msvc2022_64
|
||||
set(PATH_QT "")
|
||||
@@ -0,0 +1,66 @@
|
||||
# # # # 使用方法: 在某个target编译完后用costom_command来调用此脚本
|
||||
#
|
||||
# add_custom_command(
|
||||
# TARGET ${TG_APP}
|
||||
# POST_BUILD
|
||||
#
|
||||
# COMMAND "${CMAKE_COMMAND}"
|
||||
# "-DSRC_DIR=${PROJECT_SOURCE_DIR}/assets"
|
||||
# "-DDST_DIR=$<TARGET_FILE_DIR:${TG_APP}>/assets"
|
||||
# -P "${PROJECT_SOURCE_DIR}/cmake/copy_assets_to_output.cmake"
|
||||
#
|
||||
# COMMENT "Copying assets..."
|
||||
# VERBATIM
|
||||
# )
|
||||
#
|
||||
# # # # 若希望把 assets 内部的内容直接复制到 exe 目录,不保留最外层 assets,命令改成
|
||||
#
|
||||
# "-DDST_DIR=$<TARGET_FILE_DIR:${TG_APP}>"
|
||||
#
|
||||
# # # #
|
||||
|
||||
if(NOT DEFINED SRC_DIR)
|
||||
message(FATAL_ERROR "SRC_DIR is not defined")
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED DST_DIR)
|
||||
message(FATAL_ERROR "DST_DIR is not defined")
|
||||
endif()
|
||||
|
||||
if(NOT EXISTS "${SRC_DIR}")
|
||||
message(FATAL_ERROR "Source directory does not exist: ${SRC_DIR}")
|
||||
endif()
|
||||
|
||||
# 创建目标根目录
|
||||
file(MAKE_DIRECTORY "${DST_DIR}")
|
||||
|
||||
# 获取所有文件和目录。
|
||||
# RELATIVE 确保获得相对于 assets 的路径,以便保留目录结构。
|
||||
file(
|
||||
GLOB_RECURSE entries
|
||||
LIST_DIRECTORIES true
|
||||
RELATIVE "${SRC_DIR}"
|
||||
"${SRC_DIR}/*"
|
||||
)
|
||||
|
||||
foreach(relative_path IN LISTS entries)
|
||||
set(source_path "${SRC_DIR}/${relative_path}")
|
||||
set(target_path "${DST_DIR}/${relative_path}")
|
||||
|
||||
if(IS_DIRECTORY "${source_path}")
|
||||
# 保留目录,包括空目录
|
||||
file(MAKE_DIRECTORY "${target_path}")
|
||||
else()
|
||||
# 确保文件的父目录存在
|
||||
get_filename_component(target_parent "${target_path}" DIRECTORY)
|
||||
file(MAKE_DIRECTORY "${target_parent}")
|
||||
|
||||
# 内容相同时不覆盖
|
||||
file(
|
||||
COPY_FILE
|
||||
"${source_path}"
|
||||
"${target_path}"
|
||||
ONLY_IF_DIFFERENT
|
||||
)
|
||||
endif()
|
||||
endforeach()
|
||||
@@ -0,0 +1,66 @@
|
||||
# cmake/copy_deps_to_exe_dir.cmake
|
||||
# 用法:
|
||||
# cmake -DINPUT="C:/path/to/bin/curl.exe" `
|
||||
# -DDIRS="C:/alib/curl/bin;C:/alib/xxx/bin"
|
||||
# -P copy_deps_to_exe_dir.cmake `
|
||||
#
|
||||
# INPUT
|
||||
# 需要拷贝依赖的target的路径(不一定是生成物,可以是libcurl.dll等中间物)
|
||||
# DIRS
|
||||
# 该target所依赖项存放的目录,因为是命令行,所以无法传列表,请JOIN列表为单一字符串
|
||||
# 路径之间由__CMAKE_LIST_SEP__作为分隔符进行分割
|
||||
#
|
||||
#
|
||||
|
||||
message("${Y}==== 进入copy_deps_to_exe_dir.cmake ====${E}")
|
||||
if (NOT DEFINED INPUT OR NOT EXISTS "${INPUT}")
|
||||
message(FATAL_ERROR "INPUT not set or not exists: ${INPUT}")
|
||||
endif ()
|
||||
|
||||
|
||||
if (NOT DEFINED DIRS)
|
||||
message(FATAL_ERROR "DIRS not set: ${DIRS}")
|
||||
endif ()
|
||||
|
||||
message("INPUT=${INPUT}")
|
||||
cmake_path(GET INPUT PARENT_PATH DESTDIR)
|
||||
message("DESTDIR=${DESTDIR}")
|
||||
string(REPLACE "__CMAKE_LIST_SEP__" ";" DIR_PIPE ${DIRS})
|
||||
message("DIRS=${DIR_PIPE}") #这是依赖项们所在的目录
|
||||
|
||||
|
||||
# 解析运行时依赖
|
||||
file(GET_RUNTIME_DEPENDENCIES
|
||||
EXECUTABLES "${INPUT}"
|
||||
DIRECTORIES ${DIR_PIPE}
|
||||
RESOLVED_DEPENDENCIES_VAR _resolved
|
||||
UNRESOLVED_DEPENDENCIES_VAR _unresolved
|
||||
|
||||
# 过滤掉系统 DLL(按需增减)
|
||||
PRE_EXCLUDE_REGEXES
|
||||
"api-ms-win-.*"
|
||||
"ext-ms-.*"
|
||||
POST_EXCLUDE_REGEXES
|
||||
".*[\\\\/]System32[\\\\/].*"
|
||||
".*[\\\\/]Windows[\\\\/].*"
|
||||
)
|
||||
|
||||
if (_unresolved)
|
||||
message(WARNING "Unresolved deps:")
|
||||
foreach (d IN LISTS _unresolved)
|
||||
message(WARNING " ${d}")
|
||||
endforeach ()
|
||||
endif ()
|
||||
|
||||
# 复制解析到的 DLL
|
||||
foreach (dll IN LISTS _resolved)
|
||||
get_filename_component(dll_name "${dll}" NAME)
|
||||
set(dst_file "${DESTDIR}/${dll_name}")
|
||||
|
||||
if (EXISTS "${dst_file}")
|
||||
message(STATUS "Skip existing: ${dst_file}")
|
||||
else ()
|
||||
message(STATUS "Copy: ${dll} \n --> ${DESTDIR}")
|
||||
file(COPY "${dll}" DESTINATION "${DESTDIR}")
|
||||
endif ()
|
||||
endforeach ()
|
||||
@@ -0,0 +1,33 @@
|
||||
message("${Y}==== 进入find_curl.cmake ====${E}")
|
||||
|
||||
set(USE_CURL OFF)
|
||||
|
||||
if (DEFINED PATH_CURL AND NOT "${PATH_CURL}" STREQUAL "")
|
||||
file(TO_CMAKE_PATH ${PATH_CURL} PATH_CURL)
|
||||
if (EXISTS ${PATH_CURL})
|
||||
message("找到CURL库根目录")
|
||||
# 寻找OPENSSL
|
||||
if (NOT ${USE_SSL})
|
||||
message(FATAL_ERROR "未成功配置OpenSSL,无法启用本CURL库")
|
||||
endif ()
|
||||
# 寻找zlib
|
||||
if (NOT ${USE_ZLIB})
|
||||
message(FATAL_ERROR "未成功配置ZLIB,无法启用本CURL库")
|
||||
endif ()
|
||||
# 寻找libpsl
|
||||
# 寻找libidn2
|
||||
# 寻找nghttp2
|
||||
|
||||
set(CURL_DIR ${PATH_CURL}/lib/cmake/CURL)
|
||||
find_package(CURL CONFIG REQUIRED)
|
||||
list(APPEND CMAKE_PREFIX_PATH ${PATH_CURL})
|
||||
message("添加CURL库成功,将启用CURL")
|
||||
set(USE_CURL ON)
|
||||
else ()
|
||||
message("curl库目录配置错误,不启用curl")
|
||||
endif ()
|
||||
else ()
|
||||
message("未配置curl根目录,不启用curl")
|
||||
endif ()
|
||||
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
message("${Y}==== 进入find_opencv.cmake ====${E}")
|
||||
|
||||
set(USE_OPENCV OFF)
|
||||
if (DEFINED PATH_OPENCV AND NOT "${PATH_OPENCV}" STREQUAL "")
|
||||
file(TO_CMAKE_PATH ${PATH_OPENCV} PATH_OPENCV)
|
||||
set(PATH_OPENCV ${PATH_OPENCV}/${CMAKE_BUILD_TYPE})
|
||||
if(EXISTS ${PATH_OPENCV})
|
||||
list(APPEND CMAKE_PREFIX_PATH ${PATH_OPENCV}/x64/vc17)
|
||||
set(OpenCV_DIR ${PATH_OPENCV}/x64/vc17/lib)
|
||||
find_package(OpenCV CONFIG REQUIRED)
|
||||
message("找到opencv,将启用opencv库")
|
||||
set(USE_OPENCV ON)
|
||||
else ()
|
||||
message("opencv根目录不正确,不启用opencv")
|
||||
endif ()
|
||||
else ()
|
||||
message("未配置opencv根目录,不启用oepncv")
|
||||
endif ()
|
||||
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
message("${Y}==== 进入find_openssl.cmake ====${E}")
|
||||
|
||||
set(USE_OPENSSL OFF)
|
||||
if (DEFINED PATH_SSL AND NOT "${PATH_SSL}" STREQUAL "")
|
||||
file(TO_CMAKE_PATH ${PATH_SSL} PATH_SSL)
|
||||
if(EXISTS ${PATH_SSL})
|
||||
list(APPEND CMAKE_PREFIX_PATH ${PATH_SSL})
|
||||
find_package(OpenSSL CONFIG REQUIRED)
|
||||
message("找到OpenSSL,将启用OpenSSL库")
|
||||
set(USE_OPENSSL ON)
|
||||
else ()
|
||||
message("OPENSSL根目录不正确,不启用OPENSSL")
|
||||
endif ()
|
||||
else ()
|
||||
message("未配置OPENSSL根目录,不启用OPENSSL")
|
||||
endif ()
|
||||
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
message("${Y}==== 进入find_qt.cmake ====${E}")
|
||||
|
||||
set(USE_QT OFF)
|
||||
|
||||
if (DEFINED PATH_QT AND NOT ${PATH_QT} STREQUAL "")
|
||||
if (EXISTS ${PATH_QT})
|
||||
list(APPEND CMAKE_PREFIX_PATH ${PATH_QT})
|
||||
find_package(Qt6 COMPONENTS
|
||||
Core
|
||||
Gui
|
||||
Widgets
|
||||
REQUIRED
|
||||
)
|
||||
qt_standard_project_setup()
|
||||
message("成功配置QT,将启用QT")
|
||||
else ()
|
||||
message("QT目录配置错误,将不启用QT")
|
||||
endif ()
|
||||
else ()
|
||||
message("未配置QT目录,将不启用QT")
|
||||
endif ()
|
||||
@@ -0,0 +1,18 @@
|
||||
message("${Y}==== 进入find_vcpkg.cmake ====${E}")
|
||||
|
||||
set(USE_VCPKG OFF)
|
||||
if (DEFINED PATH_VCPKG AND NOT "${PATH_VCPKG}" STREQUAL "")
|
||||
file(TO_CMAKE_PATH ${PATH_VCPKG} PATH_VCPKG)
|
||||
set(_VCMAKE_PATH ${PATH_VCPKG}/scripts/buildsystems/vcpkg.cmake)
|
||||
if (EXISTS ${_VCMAKE_PATH})
|
||||
message("找到VCPKG,将启用VCPKG")
|
||||
list(APPEND CMAKE_TOOLCHAIN_FILE ${_VCMAKE_PATH})
|
||||
list(APPEND CMAKE_PREFIX_PATH "${PATH_VCPKG}/installed/x64-windows")
|
||||
set(USE_VCPKG ON)
|
||||
else ()
|
||||
message("VCPKG的路径错误,将不启用VCPKG")
|
||||
endif ()
|
||||
else ()
|
||||
message("未设置PATH_VCPKG,将不启用VCPKG")
|
||||
endif ()
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
message("${Y}==== 进入find_zlib.cmake ====${E}")
|
||||
|
||||
set(USE_ZLIB OFF)
|
||||
|
||||
if (DEFINED PATH_ZLIB AND NOT "${PATH_ZLIB}" STREQUAL "")
|
||||
file(TO_CMAKE_PATH ${PATH_ZLIB} PATH_ZLIB)
|
||||
if (EXISTS ${PATH_ZLIB})
|
||||
set(ZLIB_ROOT ${PATH_ZLIB})
|
||||
find_package(ZLIB CONFIG REQUIRED)
|
||||
list(APPEND CMAKE_PREFIX_PATH ${PATH_ZLIB})
|
||||
message("找到zlib库根目录,将启用ZLIB")
|
||||
set(USE_ZLIB ON)
|
||||
else ()
|
||||
message("zlib库目录配置错误,不启用zlib")
|
||||
endif ()
|
||||
else ()
|
||||
message("未配置zlib根目录,不启用zlib")
|
||||
endif ()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user