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 $<$:QT_QML_DEBUG> ) # 设置包含目录 target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${SNAP7_INCLUDE_DIR} $ $ ) # 在 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} $ ) 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$<$:Debug>DLL") endif()