cmake_minimum_required(VERSION 3.5) project(Library 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库的位置 ********************* #========================================================= # message(STATUS "CMAKE_PREFIX_PATH : ${CMAKE_PREFIX_PATH}") if(CMAKE_SYSTEM_NAME MATCHES Windows) elseif(CMAKE_SYSTEM_NAME MATCHES Linux) set(CMAKE_PREFIX_PATH "/home/Apple/Qt/Qt5.12.12/5.12.12/gcc_64") endif() #========================================================= #************** 指定可执行文件名称和位置 ***************** #========================================================= #设置可执行文件名称 set(exec_name "Library") #包含子文件夹 #include(${CMAKE_SOURCE_DIR}/CommonModule/common.cmake) #设置可执行文件和库的输出位置 if(CMAKE_CXX_COMPILER_ID MATCHES GNU) message(STATUS "Using ${CMAKE_CXX_COMPILER_ID} Compiler") #设置可执行文件输出位置 set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/../bin_GNU) #设置库生成位置 set(LIB_PATH ${CMAKE_SOURCE_DIR}/../bin_GNU) if(CMAKE_BUILD_TYPE MATCHES Debug) message(STATUS "编译类型:${CMAKE_BUILD_TYPE}") else() message(STATUS "编译类型:${CMAKE_BUILD_TYPE}") endif() elseif(CMAKE_CXX_COMPILER_ID MATCHES MSVC) message(STATUS "Using ${CMAKE_CXX_COMPILER_ID} Compiler") # string(APPEND CMAKE_CXX_FLAGS " /Zc:__cplusplus /MP") #设置可执行文件输出位置 set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/../bin_MSVC) set(LIB_PATH ${CMAKE_SOURCE_DIR}/../bin_MSVC) if(CMAKE_BUILD_TYPE MATCHES Debug) message(STATUS "编译类型:${CMAKE_BUILD_TYPE}") else() message(STATUS "编译类型:${CMAKE_BUILD_TYPE}") endif() #设置MSVC使用UTF-8 add_compile_options( "$<$:/utf-8>" # "$<$:/source-charset:utf-8>" # "$<$:/execution-charset:utf-8>" ) #消除MSVC对SPDLOG的兼容性警告 add_compile_definitions("_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING") endif() #指定库的位置,方便寻找 link_directories(${LIB_PATH}) #========================================================= #******************* 定义一些参数变量 ******************* #========================================================= #定义一些宏 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) #========================================================= #********************* 搜索添加包 ********************** #========================================================= find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets) find_package(Qt5 COMPONENTS Widgets Core # SerialPort Network # Multimedia Sql REQUIRED ) #指定库的搜索路径,主要是 .cmake文件的位置 if(CMAKE_SYSTEM_NAME MATCHES Windows) message(STATUS "Using ${CMAKE_SYSTEM_NAME} System") list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/Libraries/qmqtt) if(CMAKE_CXX_COMPILER_ID MATCHES GNU) set(fmt_DIR ${CMAKE_SOURCE_DIR}/Libraries/gcc7.3/lib/cmake/fmt) set(spdlog_DIR ${CMAKE_SOURCE_DIR}/Libraries/gcc7.3/lib/cmake/spdlog) set(freetype_DIR ${CMAKE_SOURCE_DIR}/Libraries/gcc7.3/lib/cmake/freetype) elseif(CMAKE_CXX_COMPILER_ID MATCHES MSVC) set(fmt_DIR ${CMAKE_SOURCE_DIR}/Libraries/msvc2022/lib/cmake/fmt) set(spdlog_DIR ${CMAKE_SOURCE_DIR}/Libraries/msvc2022/lib/cmake/spdlog) set(freetype_DIR ${CMAKE_SOURCE_DIR}/Libraries/msvc2022/lib/cmake/freetype) endif() elseif(CMAKE_SYSTEM_NAME MATCHES Linux) message(STATUS "Using ${CMAKE_SYSTEM_NAME} System") set(fmt_DIR ${CMAKE_SOURCE_DIR}/Libraries/deepin/lib/cmake/fmt) set(spdlog_DIR ${CMAKE_SOURCE_DIR}/Libraries/deepin/lib/cmake/spdlog) set(freetype_DIR ${CMAKE_SOURCE_DIR}/Libraries/deepin/lib/cmake/freetype) endif() find_package(fmt REQUIRED) find_package(spdlog REQUIRED) #在Windows中可能有冲突的地方,直接指明路径 # find_package(Freetype REQUIRED PATHS ${freetype_DIR}) find_package(qmqtt REQUIRED) #打印搜索到的信息 message(STATUS "fmt Found: ${fmt_FOUND}") message(STATUS "fmt Version: ${fmt_VERSION}") message(STATUS "spdlog FOUND: ${spdlog_FOUND}") message(STATUS "spdlog Version: ${spdlog_VERSION}") # message(STATUS "FreeType Found : ${Freetype_FOUND}") # message(STATUS "FreeType Version : ${Freetype_VERSION}") message(STATUS "qmqtt Found : ${qmqtt_FOUND}") message(STATUS "qmqtt Version : ${qmqtt_VERSION}") message(STATUS "qmqtt_INCLUDE_DIR : ${qmqtt_INCLUDE_DIR}") message(STATUS "qmqtt_LIBRARY : ${qmqtt_LIBRARY}") #========================================================= #**************** 搜索添加头文件和源文件 ***************** #========================================================= #包含头文件 include_directories( ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/common/Logs ) #包含源文件 file(GLOB SRC ${CMAKE_SOURCE_DIR}/*.cpp ${CMAKE_SOURCE_DIR}/common/Logs/*.cpp ) #========================================================= #******************** 生成可执行程序 ******************** #========================================================= #这里添加WIN32可以消除release模式下的cmd窗口 if(CMAKE_BUILD_TYPE MATCHES Debug) add_executable(${exec_name} # WIN32 ${SRC} ) elseif(CMAKE_BUILD_TYPE MATCHES Release) add_executable(${exec_name} # WIN32 ${SRC} ) endif() target_include_directories(${exec_name} PRIVATE ${qmqtt_INCLUDE_DIR} ) target_link_libraries(${exec_name} PRIVATE Qt5::Widgets Qt5::Core # Qt5::SerialPort Qt5::Network # Qt5::Multimedia Qt5::Sql ) target_link_libraries(${exec_name} PRIVATE # Freetype::Freetype fmt::fmt spdlog::spdlog ${qmqtt_LIBRARY} ) #target_link_libraries(${exec_name} PRIVATE ${FT2_Name}) if(CMAKE_CXX_COMPILER_ID MATCHES MSVC) target_link_libraries(${exec_name} PRIVATE # debug ${qmqtt_LIBRARY} # optimized ${qmqtt_LIBRARY} ) elseif(CMAKE_CXX_COMPILER_ID MATCHES GNU) target_link_libraries(${exec_name} PRIVATE # debug ${CMAKE_SOURCE_DIR}/Libraries/gcc7.3/bin/Qt5Qmqtt.dll # optimized ${CMAKE_SOURCE_DIR}/Libraries/gcc7.3/bin/Qt5Qmqtt.dll ) endif()