- cmake_minimum_required(VERSION 3.16)
- project(AQTSampleMachinePlug
- VERSION 1.0.0
- DESCRIPTION "Sample Machine Plugin for AQT"
- LANGUAGES CXX
- )
-
- # 项目配置
- set(CMAKE_CXX_STANDARD 17)
- set(CMAKE_CXX_STANDARD_REQUIRED ON)
- set(CMAKE_AUTOMOC ON)
- set(CMAKE_POSITION_INDEPENDENT_CODE ON)
-
- # 调试输出
- message(STATUS "----------------------------------------")
- message(STATUS "Project: ${PROJECT_NAME}")
- message(STATUS "Version: ${PROJECT_VERSION}")
- message(STATUS "Current source dir: ${CMAKE_CURRENT_SOURCE_DIR}")
- message(STATUS "FastDDS lib dir: ${fastdds_DIR}")
- message(STATUS "FastCDR lib dir: ${fastcdr_DIR}")
- message(STATUS "----------------------------------------")
-
- # 查找依赖包
- find_package(Qt6 REQUIRED COMPONENTS Core Quick)
- if(NOT fastcdr_FOUND)
- find_package(fastcdr 2 REQUIRED)
- endif()
- if(NOT fastdds_FOUND)
- find_package(fastdds 3 REQUIRED)
- endif()
-
- # 源文件分组
- set(PLUGIN_SOURCES
- "${CMAKE_CURRENT_SOURCE_DIR}/AQTSampleMachinePlug.cxx"
- )
-
- set(PLUGIN_HEADERS
- "${CMAKE_CURRENT_SOURCE_DIR}/AQTSampleMachinePlug.hpp"
- )
-
- set(DDS_FILES
- "${CMAKE_CURRENT_SOURCE_DIR}/DDSSampleMachine.IDL"
- )
-
- # 查找生成的 DDS 文件
- file(GLOB DDS_GENERATED_SOURCES
- "${CMAKE_CURRENT_SOURCE_DIR}/DDSSampleMachine*.cxx"
- "${CMAKE_CURRENT_SOURCE_DIR}/DDSSampleMachine*.cpp"
- )
-
- file(GLOB DDS_GENERATED_HEADERS
- "${CMAKE_CURRENT_SOURCE_DIR}/DDSSampleMachine*.h"
- "${CMAKE_CURRENT_SOURCE_DIR}/DDSSampleMachine*.hpp"
- )
-
- # 合并所有源文件
- set(ALL_SOURCES
- ${PLUGIN_SOURCES}
- ${PLUGIN_HEADERS}
- ${DDS_FILES}
- ${DDS_GENERATED_SOURCES}
- ${DDS_GENERATED_HEADERS}
- )
-
- # 创建源文件组
- source_group("Plugin Files" FILES ${PLUGIN_SOURCES} ${PLUGIN_HEADERS})
- source_group("DDS Files" FILES ${DDS_FILES})
- source_group("DDS Generated" FILES ${DDS_GENERATED_SOURCES} ${DDS_GENERATED_HEADERS})
-
- # 创建插件库
- add_library(${PROJECT_NAME} SHARED
- ${ALL_SOURCES}
- AQTSampleMachinePlug.json
- )
-
- # 定义导出宏
- target_compile_definitions(${PROJECT_NAME}
- PRIVATE
- AQTSAMPLEMACHINEPLUG_LIBRARY
- QT_PLUGIN
- $<$<CONFIG:Debug>:QT_QML_DEBUG>
- )
-
- # 添加包含目录
- target_include_directories(${PROJECT_NAME}
- PRIVATE
- ${CMAKE_SOURCE_DIR}
- PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}
- )
-
- # 链接依赖库
- target_link_libraries(${PROJECT_NAME}
- PRIVATE
- Qt6::Core
- Qt6::Quick
- fastdds
- fastcdr
- )
-
- # 设置目标属性
- set_target_properties(${PROJECT_NAME} PROPERTIES
- OUTPUT_NAME "${PROJECT_NAME}"
- LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
- RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
- PREFIX ""
- SUFFIX ".so"
- POSITION_INDEPENDENT_CODE ON
- VERSION ${PROJECT_VERSION}
- SOVERSION ${PROJECT_VERSION_MAJOR}
- # RPATH 设置
- SKIP_BUILD_RPATH FALSE
- BUILD_WITH_INSTALL_RPATH FALSE
- INSTALL_RPATH "$ORIGIN:${CMAKE_INSTALL_PREFIX}/lib"
- INSTALL_RPATH_USE_LINK_PATH TRUE
- )
-
- # 平台特定配置
- if(UNIX AND NOT APPLE)
- set_target_properties(${PROJECT_NAME} PROPERTIES
- INSTALL_RPATH "$ORIGIN:${CMAKE_INSTALL_PREFIX}/lib:/usr/local/lib"
- )
- endif()
-
- # 调试配置
- if(CMAKE_BUILD_TYPE STREQUAL "Debug")
- target_compile_options(${PROJECT_NAME} PRIVATE
- -g
- -Wall
- -Wextra
- )
-
- # 添加调试信息
- message(STATUS "Debug build - adding debug symbols")
- message(STATUS "Compiler flags: ${CMAKE_CXX_FLAGS_DEBUG}")
- endif()
-
- # 安装配置
- install(TARGETS ${PROJECT_NAME}
- LIBRARY DESTINATION bin
- RUNTIME DESTINATION bin
- )
- # Windows 特定配置
- if(WIN32)
- set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
- endif()
-
- # 最终构建信息
- message(STATUS "----------------------------------------")
- message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
- message(STATUS "Binary Dir: ${CMAKE_BINARY_DIR}")
- message(STATUS "Plugin Output Dir: ${CMAKE_BINARY_DIR}/bin")
- message(STATUS "Plugin name will be: ${PROJECT_NAME}.so")
- message(STATUS "----------------------------------------")
-
|