cmake_minimum_required(VERSION 3.22) project(Library_Project VERSION 1.1 LANGUAGES CXX) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) #========================================================= #******************* 设置可执行文件名称 ****************** #========================================================= #========================================================= #***************** 设置可执行文件输出位置 **************** #========================================================= #设置可执行文件和库位置,可能是qt tools的bug,选择32位依旧是64位编译器 if(CMAKE_SYSTEM_NAME MATCHES "Linux") # message(STATUS "Using Linux System") if(CMAKE_BUILD_TYPE MATCHES Debug) set(exec_out_path ${CMAKE_SOURCE_DIR}/../bin_Debug) set(BUILD_LIB_PATH ${CMAKE_SOURCE_DIR}/../bin_Debug) elseif(CMAKE_BUILD_TYPE MATCHES Release) set(exec_out_path ${CMAKE_SOURCE_DIR}/../bin_Release) set(BUILD_LIB_PATH ${CMAKE_SOURCE_DIR}/../bin_Release) endif() elseif(CMAKE_SYSTEM_NAME MATCHES "Windows") # message(STATUS "Using Windows System") if(CMAKE_CXX_COMPILER_ID MATCHES GNU) message(STATUS "Using Compiler : ${CMAKE_CXX_COMPILER_ID}") #设置日志库的位置,判断32位和64位,CMAKE_CL_64已经被废弃 if(CMAKE_SIZEOF_VOID_P EQUAL 8) # message(STATUS "Using 64bit Compiler") #设置可执行文件输出位置 set(exec_out_path ${CMAKE_SOURCE_DIR}/../bin_GNU_64) #设置库生成位置 set(BUILD_LIB_PATH ${CMAKE_SOURCE_DIR}/../bin_GNU_64) elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) # message(STATUS "Using 32bit Compiler") #设置可执行文件输出位置 set(exec_out_path ${CMAKE_SOURCE_DIR}/../bin_GNU_32) #设置库生成位置 set(BUILD_LIB_PATH ${CMAKE_SOURCE_DIR}/../bin_GNU_32) endif() elseif(CMAKE_CXX_COMPILER_ID MATCHES MSVC) #不支持MSVC # message(FATAL_ERROR "MSVC is not supported") #设置可执行文件输出位置 set(exec_out_path ${CMAKE_SOURCE_DIR}/../bin_MSVC) #设置库生成位置 set(BUILD_LIB_PATH ${CMAKE_SOURCE_DIR}/../bin_MSVC) endif() elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") # message(STATUS "Using MacOS System") if(CMAKE_BUILD_TYPE MATCHES Debug) set(exec_out_path ${CMAKE_SOURCE_DIR}/../bin_Debug) set(BUILD_LIB_PATH ${CMAKE_SOURCE_DIR}/../bin_Debug) elseif(CMAKE_BUILD_TYPE MATCHES Release) set(exec_out_path ${CMAKE_SOURCE_DIR}/../bin_Release) set(BUILD_LIB_PATH ${CMAKE_SOURCE_DIR}/../bin_Release) endif() else() message(FATAL_ERROR "Unknown System") endif() #设置库和可执行文件的输出位置 set(EXECUTABLE_OUTPUT_PATH ${exec_out_path}) set(LIBRARY_OUTPUT_PATH ${exec_out_path}) #指定库的位置,方便寻找 link_directories(${BUILD_LIB_PATH}) #========================================================= #******************* 定义一些参数变量 ******************* #========================================================= #设置MSVC的一些编译属性 if(CMAKE_CXX_COMPILER_ID MATCHES MSVC) #设置MSVC使用UTF-8,这一句是必须的,否则中文会乱码,添加这一句,也不是设置为UTF-8 with BOM编码格式了 add_compile_options( "$<$:/source-charset:utf-8>" "$<$:/execution-charset:utf-8>" ) #消除MSVC对SPDLOG的兼容性警告 add_compile_definitions("_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING") #添加MSVC的宏定义 add_compile_definitions(MSVC) endif() #添加一些gcc的编译属性 if(CMAKE_CXX_COMPILER_ID MATCHES GNU) # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g") # #添加编译参数,这个参数会应用到全局,C和C++都会生效 add_compile_options(-Wall -O2) #添加GCC的宏定义 add_compile_definitions(GCC) endif() #定义一些宏 if(CMAKE_BUILD_TYPE MATCHES Debug) add_compile_definitions(C_DEBUG) elseif(CMAKE_BUILD_TYPE MATCHES Release) add_compile_definitions(C_RELEASE) endif() if(CMAKE_CXX_COMPILER_ID MATCHES MSVC) add_compile_definitions(MSVC) elseif(CMAKE_CXX_COMPILER_ID MATCHES GNU) add_compile_definitions(GNU) endif() #需要定义这个宏,才会使用编译好的动态库 add_compile_definitions(SPDLOG_COMPILED_LIB) #给spdlog添加宏定义,使其支持%#等源文件相关的标志 add_compile_definitions(SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_TRACE) #使用spdlog的静态库 option(ENABLE_SPDLOG_STATIC_LIB "Enable spdlog static library" ON) #========================================================= #********************* 搜索添加包 ********************** #========================================================= find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets) find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Core # SerialPort Network # Multimedia Sql REQUIRED ) include(${CMAKE_SOURCE_DIR}/External/Libraries/Libraries.cmake) # include(${CMAKE_SOURCE_DIR}/External_Ex/Library_EX.cmake) #========================================================= #**************** 搜索添加头文件和源文件 ***************** #========================================================= #包含头文件 include_directories( ) #包含源文件 file(GLOB GLOBAL_SRC ) #========================================================= #******************** 生成可执行程序 ******************** #========================================================= # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/mqtt) # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/http) # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/threadPool) # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/ftp) # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/OneThread) # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/timer) # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/time) # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/VideoPlayer) # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/xlsx) add_subdirectory(${CMAKE_SOURCE_DIR}/demo/DesignerPattern) # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/ViewModel) # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/VideoPlayerGL)