- cmake_minimum_required(VERSION 3.16)
- project(AQTSampleMachinePlug
- VERSION 1.0.0
- DESCRIPTION "Sample Machine Plugin for AQT"
- LANGUAGES CXX
- )
-
- # 添加 Snap7 相关配置
- set(SNAP7_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")
- set(SNAP7_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib")
-
- # 设置 Snap7 库文件路径
- if(WIN32)
- set(SNAP7_LIB "${SNAP7_LIB_DIR}/snap7.lib")
- set(SNAP7_DLL "${SNAP7_LIB_DIR}/snap7.dll")
- else()
- set(SNAP7_LIB "${SNAP7_LIB_DIR}/libsnap7.so")
- endif()
-
- # 项目配置
- set(CMAKE_CXX_STANDARD 17)
- set(CMAKE_CXX_STANDARD_REQUIRED ON)
- set(CMAKE_AUTOMOC ON)
- set(CMAKE_POSITION_INDEPENDENT_CODE ON)
-
- # 查找依赖包
- 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(SNAP7_SOURCES
- "${SNAP7_INCLUDE_DIR}/snap7.h"
- "${SNAP7_INCLUDE_DIR}/snap7.cpp"
- )
-
- # 源文件分组
- 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
- ${SNAP7_SOURCES}
- ${PLUGIN_SOURCES}
- ${PLUGIN_HEADERS}
- ${DDS_FILES}
- ${DDS_GENERATED_SOURCES}
- ${DDS_GENERATED_HEADERS}
- )
-
- # 创建源文件组
- source_group("snap7 Files" FILES ${SNAP7_SOURCES})
- 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(${PROJECT_NAME} SHARED
- ${ALL_SOURCES}
- ${QML_FILES}
- AQTSampleMachinePlug.json
- )
-
- # 调试配置 - 移动到创建目标之后
- 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_include_directories(${PROJECT_NAME}
- PRIVATE
- ${CMAKE_SOURCE_DIR}
- ${CMAKE_CURRENT_SOURCE_DIR}
- ${SNAP7_INCLUDE_DIR}
- PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}
- )
-
- # 设置目标属性
- 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
- )
-
- # 安装配置
- install(TARGETS ${PROJECT_NAME}
- LIBRARY DESTINATION bin
- RUNTIME DESTINATION bin
- )
- # Windows 特定配置
- if(WIN32)
- set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
-
- # 添加 Snap7 相关的编译定义
- target_compile_definitions(${PROJECT_NAME}
- PRIVATE
- AQTSAMPLEMACHINEPLUG_LIBRARY
- QT_PLUGIN
- SNAP7_EXPORTS # 添加这个
- $<$<CONFIG:Debug>:QT_QML_DEBUG>
- )
- 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 "----------------------------------------")
-
- # 添加资源文件
- qt_add_resources(${PROJECT_NAME} "resources"
- PREFIX
- "/AQTSampleMachinePlug"
- FILES
- ConfigWindow.qml
- )
- # 链接库时确保 snap7 在最后
- target_link_libraries(${PROJECT_NAME}
- PRIVATE
- Qt6::Core
- Qt6::Quick
- fastdds
- fastcdr
- ${SNAP7_LIB} # 保持在最后
- )
-
|