cmake_minimum_required(VERSION 3.16) # 项目基本信息 project(AuseftDDSPlugTest VERSION 0.1 LANGUAGES CXX) # 构建类型设置(如果未指定则默认为Debug) if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "构建类型: Debug 或 Release" FORCE) endif() # 基本编译设置 set(CMAKE_CXX_STANDARD 17) # 使用C++17标准 set(CMAKE_CXX_STANDARD_REQUIRED ON) # 强制使用指定的C++标准 set(CMAKE_POSITION_INDEPENDENT_CODE ON) # 生成位置无关代码 set(CMAKE_AUTOMOC ON) # Qt元对象编译器 set(CMAKE_AUTORCC ON) # Qt资源编译器 set(CMAKE_AUTOUIC ON) # Qt UI编译器 # 根据平台设置编译选项 if(WIN32) set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0 -Wall") set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) # Windows下导出所有符号 else() set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0 -Wall -Wextra") endif() set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3") # 设置输出目录 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) # 可执行文件输出目录 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) # 库文件输出目录 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) # 静态库输出目录 # Windows平台特殊处理:确保多配置生成器(如Visual Studio)也将文件输出到正确位置 if(WIN32) foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/bin) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/bin) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/bin) endforeach() endif() # 查找必要的包 find_package(OpenGL REQUIRED) find_package(Qt6 6.8 REQUIRED COMPONENTS Core # 添加 Core,这是基础组件 Quick OpenGL Gui Qml ) # 添加接口库 add_library(Interfaces INTERFACE) target_include_directories(Interfaces INTERFACE ${CMAKE_SOURCE_DIR}) # 添加主可执行文件 qt_add_executable(${PROJECT_NAME} main.cpp PluginLoader.cpp PluginLoader.hpp MANUAL_FINALIZATION ) # 添加QML模块 qt_add_qml_module(${PROJECT_NAME} URI AuseftDDSPlugTest VERSION 1.0 QML_FILES Main.qml ) # 设置目标属性 set_target_properties(${PROJECT_NAME} PROPERTIES WIN32_EXECUTABLE TRUE # Windows下作为GUI应用程序 MACOSX_BUNDLE TRUE # macOS下作为应用程序包 ) # 链接依赖库 target_link_libraries(${PROJECT_NAME} PRIVATE Interfaces Qt6::Quick Qt6::OpenGL Qt6::Gui # 添加 Gui Qt6::Qml # 添加 Qml OpenGL::GL ) # 添加插件子目录 add_subdirectory(plugins/AQTSampleMachinePlug BEFORE) # 设置包含目录 target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/plugins ) # 完成Qt可执行文件设置 qt_finalize_executable(${PROJECT_NAME}) # 输出构建信息 message(STATUS "构建类型: ${CMAKE_BUILD_TYPE}") message(STATUS "构建目录: ${CMAKE_BINARY_DIR}")