123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- 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(
- "$<$<CXX_COMPILER_ID:MSVC>:/utf-8>"
- # "$<$<CXX_COMPILER_ID:MSVC>:/source-charset:utf-8>"
- # "$<$<CXX_COMPILER_ID:MSVC>:/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()
|