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}) # 设置输出文件名和后缀 if(WIN32) set(CMAKE_SHARED_LIBRARY_SUFFIX ".dll") else() set(CMAKE_SHARED_LIBRARY_SUFFIX ".so") endif() # 在 add_library 之前添加 set(QML_FILES ConfigWindow.qml ) # 创建插件库 add_library(${PROJECT_NAME} SHARED ${ALL_SOURCES} ${QML_FILES} AQTSampleMachinePlug.json ) # 确保 QML 文件被复制到正确的位置 foreach(QML_FILE ${QML_FILES}) add_custom_command( TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${QML_FILE} ${CMAKE_BINARY_DIR}/plugins/${PROJECT_NAME}/${QML_FILE} ) endforeach() # 调试配置 - 移动到创建目标之后 if(CMAKE_BUILD_TYPE STREQUAL "Debug") if(MSVC) target_compile_options(${PROJECT_NAME} PRIVATE /W4 /Zi # 调试信息 /Od # 禁用优化 ) else() target_compile_options(${PROJECT_NAME} PRIVATE -g -Wall -Wextra -O0 ) endif() # 添加调试信息 message(STATUS "Debug build - adding debug symbols") message(STATUS "Compiler flags: ${CMAKE_CXX_FLAGS_DEBUG}") endif() # 定义导出宏 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}/plugins" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/plugins" PREFIX "" SUFFIX "${CMAKE_SHARED_LIBRARY_SUFFIX}" # 使用平台相关的后缀 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() # 安装配置 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 "----------------------------------------")