Browse Source

V0.4
1、修改了.cmake文件,Windows下可以编译完成
2、重新编译了msvc版本的spdlog和fmt库

Apple 5 months ago
parent
commit
72daa2e490

+ 17 - 4
Libraries/Libraries.cmake

@@ -28,7 +28,7 @@ message(STATUS "==================================================")
 #=========================================================
 
 # 这一段主要是搜索生成的标准开源库
-# fmt、spdlog、CURL
+# fmt、spdlog等
 # fmt和spdlog的64位支持动态库和静态库,32位只支持静态库
 # spdlog设置 ENABLE_SPDLOG_STATIC_LIB = TRUE,使用静态库,否则使用动态库,默认使用动态库
 # CURL只支持动态库,debug版本的.cmake文件也经过修改,全部指向release版本的动态库,方便和LHHTTPAPI一起调用
@@ -95,9 +95,6 @@ find_package(spdlog REQUIRED)
 find_package(OpenSSL-1.1.1 REQUIRED)
 #链接curl库,使用的是CURL::libcurl
 find_package(CURL REQUIRED)
-#hiredis库
-find_package(hiredis REQUIRED)
-
 #在Windows中可能有冲突的地方,直接指明路径
 # find_package(Freetype REQUIRED PATHS ${freetype_DIR})
 find_package(qmqtt REQUIRED)
@@ -107,6 +104,22 @@ find_package(SM REQUIRED)
 find_package(LHQLog REQUIRED)
 find_package(LHHTTPAPI REQUIRED)
 
+#有些库缺少某些平台、编译器的库,所以这里也根据平台、编译器进行搜索
+if(CMAKE_SYSTEM_NAME MATCHES "Windows")
+    if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
+        
+    elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
+
+    endif()
+#Linux只有64位,动态库和静态库都可以选择
+elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
+    #hiredis库
+    find_package(hiredis REQUIRED)
+endif()
+
+
+
+
 #=========================================================
 #*******************  打印搜索到的信息 *******************
 #=========================================================

BIN
Libraries/msvc2022.zip


BIN
Libraries/msvc2022/bin/fmt.dll


BIN
Libraries/msvc2022/bin/fmtd.dll


BIN
Libraries/msvc2022/bin/spdlog.dll


BIN
Libraries/msvc2022/bin/spdlogd.dll


+ 12 - 12
Libraries/msvc2022/lib/cmake/fmt/fmt-targets.cmake

@@ -3,11 +3,11 @@
 if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8)
    message(FATAL_ERROR "CMake >= 2.8.0 required")
 endif()
-if(CMAKE_VERSION VERSION_LESS "2.8.3")
-   message(FATAL_ERROR "CMake >= 2.8.3 required")
+if(CMAKE_VERSION VERSION_LESS "3.0.0")
+   message(FATAL_ERROR "CMake >= 3.0.0 required")
 endif()
 cmake_policy(PUSH)
-cmake_policy(VERSION 2.8.3...3.26)
+cmake_policy(VERSION 3.0.0...3.28)
 #----------------------------------------------------------------
 # Generated CMake target import file.
 #----------------------------------------------------------------
@@ -75,10 +75,6 @@ set_target_properties(fmt::fmt-header-only PROPERTIES
   INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
 )
 
-if(CMAKE_VERSION VERSION_LESS 3.0.0)
-  message(FATAL_ERROR "This file relies on consumers using CMake 3.0.0 or greater.")
-endif()
-
 # Load information for each installed configuration.
 file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/fmt-targets-*.cmake")
 foreach(_cmake_config_file IN LISTS _cmake_config_files)
@@ -92,9 +88,12 @@ set(_IMPORT_PREFIX)
 
 # Loop over all imported files and verify that they actually exist
 foreach(_cmake_target IN LISTS _cmake_import_check_targets)
-  foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}")
-    if(NOT EXISTS "${_cmake_file}")
-      message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file
+  if(CMAKE_VERSION VERSION_LESS "3.28"
+      OR NOT DEFINED _cmake_import_check_xcframework_for_${_cmake_target}
+      OR NOT IS_DIRECTORY "${_cmake_import_check_xcframework_for_${_cmake_target}}")
+    foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}")
+      if(NOT EXISTS "${_cmake_file}")
+        message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file
    \"${_cmake_file}\"
 but this file does not exist.  Possible reasons include:
 * The file was deleted, renamed, or moved to another location.
@@ -103,8 +102,9 @@ but this file does not exist.  Possible reasons include:
    \"${CMAKE_CURRENT_LIST_FILE}\"
 but not all the files it references.
 ")
-    endif()
-  endforeach()
+      endif()
+    endforeach()
+  endif()
   unset(_cmake_file)
   unset("_cmake_import_check_files_for_${_cmake_target}")
 endforeach()

+ 0 - 44
Libraries/msvc2022/lib/cmake/spdlog/Findspdlog.cmake_back

@@ -1,44 +0,0 @@
-
-
-message(STATUS "Find spdlog include : ${CMAKE_CURRENT_LIST_DIR}/../../../include")
-
-#使用外部的fmt库
-#需要定义这个宏,才会使用编译好的动态库
-add_compile_definitions(SPDLOG_COMPILED_LIB)
-#添加这个定义,使用外部的fmt库
-add_compile_definitions(SPDLOG_FMT_EXTERNAL)
-# set(SPDLOG_FMT_EXTERNAL ON)
-# set(SPDLOG_FMT_EXTERNAL_HO OFF)
-
-#定义spdlog版本
-set(spdlog_VERSION 1.14.1)
-
-#先清空缓存
-unset(INCLUDE_DIR CACHE)
-find_path(INCLUDE_DIR 
-    NAMES spdlog.h
-    PATHS ${CMAKE_CURRENT_LIST_DIR}/../../../include/spdlog
-    NO_DEFAULT_PATH
-)
-list(APPEND spdlog_INCLUDE_DIRS ${INCLUDE_DIR})
-
-unset(INCLUDE_DIR CACHE)
-find_path(INCLUDE_DIR 
-    NAMES spdlog/spdlog.h
-    PATHS ${CMAKE_CURRENT_LIST_DIR}/../../../include
-    NO_DEFAULT_PATH
-)
-list(APPEND spdlog_INCLUDE_DIRS ${INCLUDE_DIR})
-
-
-#查找库文件
-find_library(spdlog_LIBRARY
-    NAMES spdlog
-    PATHS ${CMAKE_CURRENT_LIST_DIR}/../../../lib
-    NO_DEFAULT_PATH
-)
-
-
-if(spdlog_INCLUDE_DIRS AND spdlog_LIBRARY)
-    set(spdlog_FOUND TRUE)
-endif()

+ 19 - 0
Libraries/msvc2022/lib/cmake/spdlog/spdlogConfigTargets-debug.cmake

@@ -0,0 +1,19 @@
+#----------------------------------------------------------------
+# Generated CMake target import file for configuration "Debug".
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Import target "spdlog::spdlog" for configuration "Debug"
+set_property(TARGET spdlog::spdlog APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
+set_target_properties(spdlog::spdlog PROPERTIES
+  IMPORTED_IMPLIB_DEBUG "${_IMPORT_PREFIX}/lib/spdlogd.lib"
+  IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/bin/spdlogd.dll"
+  )
+
+list(APPEND _cmake_import_check_targets spdlog::spdlog )
+list(APPEND _cmake_import_check_files_for_spdlog::spdlog "${_IMPORT_PREFIX}/lib/spdlogd.lib" "${_IMPORT_PREFIX}/bin/spdlogd.dll" )
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)

+ 12 - 12
Libraries/msvc2022/lib/cmake/spdlog/spdlogConfigTargets.cmake

@@ -3,11 +3,11 @@
 if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8)
    message(FATAL_ERROR "CMake >= 2.8.0 required")
 endif()
-if(CMAKE_VERSION VERSION_LESS "2.8.3")
-   message(FATAL_ERROR "CMake >= 2.8.3 required")
+if(CMAKE_VERSION VERSION_LESS "3.0.0")
+   message(FATAL_ERROR "CMake >= 3.0.0 required")
 endif()
 cmake_policy(PUSH)
-cmake_policy(VERSION 2.8.3...3.26)
+cmake_policy(VERSION 3.0.0...3.28)
 #----------------------------------------------------------------
 # Generated CMake target import file.
 #----------------------------------------------------------------
@@ -74,10 +74,6 @@ set_target_properties(spdlog::spdlog_header_only PROPERTIES
   INTERFACE_LINK_LIBRARIES "Threads::Threads;fmt::fmt"
 )
 
-if(CMAKE_VERSION VERSION_LESS 3.0.0)
-  message(FATAL_ERROR "This file relies on consumers using CMake 3.0.0 or greater.")
-endif()
-
 # Load information for each installed configuration.
 file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/spdlogConfigTargets-*.cmake")
 foreach(_cmake_config_file IN LISTS _cmake_config_files)
@@ -91,9 +87,12 @@ set(_IMPORT_PREFIX)
 
 # Loop over all imported files and verify that they actually exist
 foreach(_cmake_target IN LISTS _cmake_import_check_targets)
-  foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}")
-    if(NOT EXISTS "${_cmake_file}")
-      message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file
+  if(CMAKE_VERSION VERSION_LESS "3.28"
+      OR NOT DEFINED _cmake_import_check_xcframework_for_${_cmake_target}
+      OR NOT IS_DIRECTORY "${_cmake_import_check_xcframework_for_${_cmake_target}}")
+    foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}")
+      if(NOT EXISTS "${_cmake_file}")
+        message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file
    \"${_cmake_file}\"
 but this file does not exist.  Possible reasons include:
 * The file was deleted, renamed, or moved to another location.
@@ -102,8 +101,9 @@ but this file does not exist.  Possible reasons include:
    \"${CMAKE_CURRENT_LIST_FILE}\"
 but not all the files it references.
 ")
-    endif()
-  endforeach()
+      endif()
+    endforeach()
+  endif()
   unset(_cmake_file)
   unset("_cmake_import_check_files_for_${_cmake_target}")
 endforeach()

BIN
Libraries/msvc2022/lib/fmt.lib


BIN
Libraries/msvc2022/lib/fmtd.lib


+ 2 - 2
Libraries/msvc2022/lib/pkgconfig/fmt.pc

@@ -1,5 +1,5 @@
-prefix=D:/_SourceFile/test1/fmt
-exec_prefix=D:/_SourceFile/test1/fmt
+prefix=D:/Library/zip/fmt-11.0.1/fmt
+exec_prefix=D:/Library/zip/fmt-11.0.1/fmt
 libdir=${exec_prefix}/lib
 includedir=${prefix}/include
 

+ 1 - 1
Libraries/msvc2022/lib/pkgconfig/spdlog.pc

@@ -1,4 +1,4 @@
-prefix=D:/_SourceFile/test1/msvc2022
+prefix=D:/Library/zip/spdlog-1.14.1
 exec_prefix=${prefix}
 includedir=${prefix}/include
 libdir=${exec_prefix}/lib

BIN
Libraries/msvc2022/lib/spdlog.lib


BIN
Libraries/msvc2022/lib/spdlogd.lib


+ 30 - 25
common/LHLog/LHLogInit.cpp

@@ -6,7 +6,7 @@
 
 
 #include <string>
-#include <filesystem>
+#include <QApplication>
 
 
 /* 初始化spdlog,输入的是模组名称,可以为空
@@ -18,58 +18,63 @@
 void initLog(QString ModuleName, CLHQLogApi& lhQLog)
 {
 
-    try {
-        /* 创建一个控制台sink */
-        auto sink_consolse = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
+    try 
+    {
         /* 创建一个文件sink,每天一个,00:00创建新的 */
         // auto sink_file = std::make_shared<spdlog::sinks::daily_file_sink_mt>("FlowChartLog/log.txt",0,0);
         /* 自定义的sink */
-        std::filesystem::path execPath = std::filesystem::current_path();
+        // std::filesystem::path execPath = std::filesystem::current_path();
+        std::string execPath = QApplication::applicationDirPath().toStdString();
     #if defined(Q_OS_WIN32)
         #if C_DEBUG
-            std::string libName = execPath.string() + "/LHQLogd.dll";
+            std::string libName = execPath + "/LHQLogd.dll";
         #elif C_RELEASE
-            std::string libName = execPath.string() + "/LHQLog.dll";
+            std::string libName = execPath + "/LHQLog.dll";
         #endif
     #elif defined(Q_OS_LINUX)
-        std::string libName = execPath.string() + "/libLHQLog.so";
+        std::string libName = execPath + "/libLHQLog.so";
     #endif
-        auto sink_custom = std::make_shared<spdlog::sinks::LHLog_file_sink_mt>(&lhQLog, QString(libName.c_str()), ModuleName);
+        
         /* 给默认记录器用的sink */
         auto sink_default = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
+        /* 创建一个控制台sink */
+        auto sink_consolse = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
+        /* 创建写入文件的sink */
+        auto sink_LHLog = std::make_shared<spdlog::sinks::LHLog_file_sink_mt>(&lhQLog, QString(libName.c_str()), ModuleName);
  
         /* 修改输出格式 */
-        sink_consolse->set_pattern("%^[%Y-%m-%d %H:%M:%S] [%l] [%n] [%s %#] %v %$");
-        // sink_file->set_pattern("[%Y-%m-%d %H:%M:%S] [%^%n%$] [%^%l%$] %s %#: %v");
-        sink_custom->set_pattern("%v");
-        sink_default->set_pattern("%^[%Y-%m-%d %H:%M:%S] [%l] [%s %#] %v %$");
+        #if C_DEBUG
+            sink_consolse->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] [%n] [%s %#] %v %$");
+            // sink_file->set_pattern("[%Y-%m-%d %H:%M:%S:%e] [%^%n%$] [%^%l%$] %s %#: %v");
+            sink_LHLog->set_pattern("%v");
+            sink_default->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e:%e] [%l] [%s %#] %v %$");
+        #elif C_RELEASE
+            sink_consolse->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] [%n] %v %$");
+            // sink_file->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] [%n]: %v %$");
+            sink_LHLog->set_pattern("%v");
+            sink_default->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] %v %$");
+        #endif
 
         /* 日志输出方向,终端和文件 */
         std::vector<spdlog::sink_ptr> sinks;
         sinks.push_back(sink_consolse);
         // sinks.push_back(sink_file);
-        sinks.push_back(sink_custom);
+        sinks.push_back(sink_LHLog);
 
         /* 设置默认日志记录器,设置成自定义的sink */
         spdlog::default_logger()->sinks().clear();
         spdlog::default_logger()->sinks().push_back(sink_default);
-        spdlog::default_logger()->sinks().push_back(sink_custom);
-        // auto vecSinks =  spdlog::default_logger()->sinks();
-        // for(auto& sink : vecSinks)
-        // {
-        //     SPDLOG_INFO("sink name = {}", typeid(*sink).name());
-        // }
+        spdlog::default_logger()->sinks().push_back(sink_LHLog);
+
         /* 创建一个标准输出 */
         auto logger_main = std::make_shared<spdlog::logger>("main",begin(sinks),end(sinks));
         /* 创建一个WebAPI logger */
         auto logger_WebAPI = std::make_shared<spdlog::logger>("WebAPI",begin(sinks),end(sinks));
-        /* 创建一个发射机通用 Logger */
-        auto logger_SuperBrain = std::make_shared<spdlog::logger>("SuperBrain",begin(sinks),end(sinks));
+
 
         /* 注册到注册表 */
         spdlog::register_logger(logger_main);
         spdlog::register_logger(logger_WebAPI);
-        spdlog::register_logger(logger_SuperBrain);
 
         /* 设置spdlog输出级别,默认的估计不输出debug这个级别
          * 这是默认的设置,可以在外面单数设置输出方式
@@ -81,8 +86,8 @@ void initLog(QString ModuleName, CLHQLogApi& lhQLog)
 #elif defined(C_RELEASE)
         spdlog::set_level(spdlog::level::info);             /* 只输出info以上的输出 */
         spdlog::flush_on(spdlog::level::info);              /* 设置刷新等级 */
-        sink_consolse->set_level(spdlog::level::off);       /* 控制台不输出 */
-        sink_default->set_level(spdlog::level::off);        /* 默认sink也不输出 */
+        sink_consolse->set_level(spdlog::level::info);       /* 控制台不输出 */
+        sink_default->set_level(spdlog::level::info);        /* 默认sink也不输出 */
 #endif
 
 //    SPDLOG_LOGGER_DEBUG(logger_main,"******* 有行号且debug也能输出 *******");

+ 19 - 5
common/Logs/loginit.cpp

@@ -4,20 +4,34 @@
 #include "spdlog/sinks/stdout_color_sinks.h"
 #include "spdlog/sinks/daily_file_sink.h"
 
-#include "fmt/base.h"
+// #include "fmt/base.h"
 
 /* 初始化spdlog */
 void init_log()
 {
-    try {
+    try 
+    {
+        /* 给默认记录器用的sink */
+        auto sink_default = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
         /* 创建一个控制台sink */
         auto sink_consolse = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
         /* 创建一个文件sink,每天一个,00:00创建新的 */
-        auto sink_file = std::make_shared<spdlog::sinks::daily_file_sink_mt>("log/log.txt",0,0);
+        auto sink_file = std::make_shared<spdlog::sinks::daily_file_sink_mt>("log/log.txt", 0, 0);
         /* 修改输出格式 */
-        sink_consolse->set_pattern("%^[%Y-%m-%d %H:%M:%S] [%n] [%l] %s %#: %v%$");
-        sink_file->set_pattern("%^[%Y-%m-%d %H:%M:%S] [%n] [%l] %s %#: %v %$");
+        #if C_DEBUG
+            sink_default->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] [%s %#] %v %$");
+            sink_consolse->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] [%n] [%s %#] %v%$");
+            sink_file->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] [%n] [%s %#] %v %$");
+        #elif C_RELEASE
+            sink_default->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] %v %$");
+            sink_consolse->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] [%n] %v %$");
+            sink_file->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] [%n] %v %$");
+        #endif
 
+        /* 设置默认日志记录器,设置成自定义的sink */
+        spdlog::default_logger()->sinks().clear();
+        spdlog::default_logger()->sinks().push_back(sink_default);
+        /* 创建sink数组 */
         std::vector<spdlog::sink_ptr> sinks;
         sinks.push_back(sink_consolse);
         sinks.push_back(sink_file);

+ 1 - 1
common/Thread/threadcontroller.cpp

@@ -168,7 +168,7 @@ WorkerCollector::~WorkerCollector()
     auto pred = [](QPointer<ThreadWorker> x){return x != nullptr;};
     QList<QPointer<ThreadWorker>> remainWorkers;
     std::copy_if(m_listWorkers.begin(), m_listWorkers.end(), std::back_inserter(remainWorkers), pred);
-    qDebug()<<"线程管理器释放: 待释放工作对象个数"<<remainWorkers.count();
+    qDebug() << "线程管理器释放: 待释放工作对象个数" << remainWorkers.count();
     int counter = 0;
     for(QPointer<ThreadWorker> pWorker: remainWorkers)
     {

+ 5 - 4
common/ThreadPool/ThreadPool.cpp

@@ -15,14 +15,15 @@ ThreadPool::ThreadPool() :
 {
 
     /* 初始化变量 */
-    m_threadMaxNum = std::thread::hardware_concurrency();   /* 根据CPU核心数规定线程数目 */
+    // m_threadMaxNum = std::thread::hardware_concurrency();   /* 根据CPU核心数规定线程数目 */
+    m_threadMaxNum = 256;
     m_threadMiniNum = 3;
-    m_threadLiveNum = 0;
-    m_threadExitNum = 0;
-    m_threadAddNum = 5;
+    m_threadAddNum = 2;
     m_threadMiniIdle = 2;
     m_threadMaxIdle = 6;
     m_threadRunNum = 0;
+    m_threadLiveNum = 0;
+    m_threadExitNum = 0;
 
     /* 创建管理线程,this表示是这个类的成员函数 */
     m_managerThread = std::thread(&ThreadPool::managerThread, this);

+ 3 - 3
common/ThreadPool/ThreadPool.h

@@ -134,13 +134,13 @@ private:
 
     int m_threadMaxNum = 256;                               /* 默认最大线程数 */
     int m_threadMiniNum = 5;                                /* 默认线程池中最小线程数 */
-    std::atomic<int> m_threadRunNum;                        /* 正在运行的线程个数 */
-    std::atomic<int> m_threadLiveNum;                       /* 现有的线程个数 */
-    std::atomic<int> m_threadExitNum;                       /* 需要销毁的线程个数 */
     std::atomic<int> m_threadAddNum;                        /* 每次需要添加的线程个数 */
     std::atomic<int> m_threadMiniIdle;                      /* 如果空闲线程小于这个数,就添加m_ThreadAddNum个线程 */
     std::atomic<int> m_threadMaxIdle;                       /* 最大空闲的线程个数,超过这个个数一定时间,就会销毁多余的 */
 
+    std::atomic<int> m_threadRunNum;                        /* 正在运行的线程个数 */
+    std::atomic<int> m_threadLiveNum;                       /* 现有的线程个数 */
+    std::atomic<int> m_threadExitNum;                       /* 需要销毁的线程个数 */
 };
 
 #endif /* THREADPOOL_H */