|
- cmake_minimum_required(VERSION 3.16)
-
- # 插件项目信息
- project(AQTSampleMachinePlug
- VERSION 1.0.0
- DESCRIPTION "AQT示例机器插件"
- LANGUAGES CXX
- )
-
- # 基本设置
- 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)
- find_package(fastcdr 2 REQUIRED)
- find_package(fastdds 3 REQUIRED)
-
- # 源文件设置
- 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_FILES
- "${CMAKE_CURRENT_SOURCE_DIR}/DDSSampleMachine*.cxx"
- "${CMAKE_CURRENT_SOURCE_DIR}/DDSSampleMachine*.cpp"
- "${CMAKE_CURRENT_SOURCE_DIR}/DDSSampleMachine*.h"
- "${CMAKE_CURRENT_SOURCE_DIR}/DDSSampleMachine*.hpp"
- )
-
- # 添加 Snap7 源代码
- set(SNAP7_SOURCES
- "${SNAP7_ROOT}/src/sys/snap7_libmain.cpp"
- "${SNAP7_ROOT}/src/sys/snap7_client.cpp"
- )
-
- # 创建插件库
- add_library(${PROJECT_NAME} SHARED
- ${PLUGIN_SOURCES}
- ${PLUGIN_HEADERS}
- ${DDS_FILES}
- ${DDS_GENERATED_FILES}
- ${SNAP7_SOURCES} # 添加 Snap7 源代码
- 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}
- ${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_CURRENT_SOURCE_DIR}/include
- ${SNAP7_INCLUDE_DIR}
- $<TARGET_PROPERTY:Qt::Core,INTERFACE_INCLUDE_DIRECTORIES>
- $<TARGET_PROPERTY:Qt::Quick,INTERFACE_INCLUDE_DIRECTORIES>
- )
-
- # 在 project() 声明后立即添加
- set(LOCAL_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")
- set(LOCAL_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib")
-
- # Snap7 库路径设置
- if(WIN32)
- set(SNAP7_INCLUDE_DIR "${LOCAL_INCLUDE_DIR}")
- set(SNAP7_LIBRARY "${LOCAL_LIB_DIR}/snap7.lib")
- set(SNAP7_DLL "${LOCAL_LIB_DIR}/snap7.dll")
- else()
- find_library(SNAP7_LIBRARY NAMES snap7 libsnap7)
- find_path(SNAP7_INCLUDE_DIR NAMES snap7.h)
- endif()
-
- # 检查是否找到库
- if(NOT SNAP7_LIBRARY OR NOT SNAP7_INCLUDE_DIR)
- message(FATAL_ERROR "Snap7 library not found. Please check SNAP7_ROOT path.")
- endif()
-
- # 链接 Snap7 库
- target_link_libraries(${PROJECT_NAME} PRIVATE
- Qt::Core
- Qt::Quick
- fastdds
- fastcdr
- ${SNAP7_LIBRARY}
- )
-
- # 复制 DLL 到输出目录
- if(WIN32)
- add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- ${SNAP7_DLL}
- $<TARGET_FILE_DIR:${PROJECT_NAME}>
- )
- endif()
-
- # 设置目标属性
- set_target_properties(${PROJECT_NAME} PROPERTIES
- PREFIX "" # 移除库文件前缀
- SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX} # 根据平台设置正确的后缀(.dll/.so)
- LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
- RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
- )
-
- # 平台特定配置
- if(WIN32)
- set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) # Windows下导出所有符号
- endif()
-
- # Debug模式下的编译选项
- if(CMAKE_BUILD_TYPE STREQUAL "Debug")
- if(WIN32)
- target_compile_options(${PROJECT_NAME} PRIVATE -g -Wall)
- else()
- target_compile_options(${PROJECT_NAME} PRIVATE -g -Wall -Wextra)
- endif()
- endif()
-
- # 输出构建信息
- message(STATUS "----------------------------------------")
- message(STATUS "插件名称: ${PROJECT_NAME}")
- message(STATUS "插件版本: ${PROJECT_VERSION}")
- message(STATUS "构建类型: ${CMAKE_BUILD_TYPE}")
- message(STATUS "输出目录: ${CMAKE_BINARY_DIR}/bin")
- message(STATUS "输出文件: ${PROJECT_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}")
- message(STATUS "----------------------------------------")
-
- # 添加这行来打印 Qt 包含路径
- message(STATUS "Qt Include Dirs: ${Qt6Core_INCLUDE_DIRS}")
-
- # 在文件开头添加
- if(MSVC)
- # 添加预处理器定义
- add_definitions(-DSNAP7_EXPORTS)
- endif()
-
- # 修改链接设置
- target_link_libraries(${PROJECT_NAME}
- PRIVATE
- Qt::Core
- Qt::Quick
- fastdds
- fastcdr
- ${SNAP7_LIBRARY}
- )
-
- if(MSVC)
- # 为 MSVC 添加特定的链接选项
- target_link_options(${PROJECT_NAME}
- PRIVATE
- /NODEFAULTLIB:library
- /DEFAULTLIB:msvcrt.lib
- )
- endif()
-
- if(MSVC)
- # 使用多线程 DLL 运行时库
- set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
- endif()
-
|