xcode warning trailing whitespace 解决办法

博客主要讲述了在 Xcode 中遇到的问题,因一行末尾存在空格而产生报警,解决办法是将行后面的空格删除,为使用 Xcode 时遇到类似问题提供了解决思路。

问题:

因为一行的后边有空格,所以产生报警


解决办法:

将行后面的空格删除

cmake_minimum_required(VERSION 3.20) # 设置项目名称和版本 project(DTENApp LANGUAGES CXX VERSION 1.1.2.0729) # 设置 C++ 标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 查找 Qt6 find_package(Qt6 REQUIRED COMPONENTS Quick Widgets Sql Multimedia) qt_standard_project_setup(REQUIRES 6.5) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) # 只在 Xcode 生成器中设置代码签名 if(CMAKE_GENERATOR STREQUAL "Xcode") set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "") set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY_RELEASE "Apple Distribution") set(CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE "NO") set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "YES") endif() # 设置第三方库路径 set(DTENLog_DIR "${CMAKE_SOURCE_DIR}/thirdpart/DTENLog") set(DTENLog_INCLUDE_DIRS "${DTENLog_DIR}/include/mac") set(ChannelMgr_DIR "${CMAKE_SOURCE_DIR}/thirdpart/ChannelMgr/mac") set(ChannelMgr_INCLUDE_DIRS "${ChannelMgr_DIR}/include") # 设置库文件路径 if(APPLE) set(DTENLog_LIBRARY "${DTENLog_DIR}/lib/libglog.dylib") set(ChannelMgr_LIBRARY "${ChannelMgr_DIR}/lib/libChannelMgr.dylib") else() set(DTENLog_LIBRARY "${DTENLog_DIR}/lib/DTENLog.lib") endif() # 平台特定配置 if(WIN32) message(STATUS "Windows platform detected, configuring version info...") set(MY_VERSIONINFO_RC "${CMAKE_CURRENT_SOURCE_DIR}/VersionInfo.rc") configure_file("${CMAKE_CURRENT_SOURCE_DIR}/VersionInfo.rc.in" "${MY_VERSIONINFO_RC}") list(APPEND SOURCES ${MY_VERSIONINFO_RC}) if(MSVC) set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") endif() qt_add_executable(${PROJECT_NAME} WIN32 Main.cpp logo.rc ${MY_VERSIONINFO_RC} ) elseif(APPLE) message(STATUS "macOS platform detected, configuring bundle...") # macOS 特定设置 set(CMAKE_OSX_DEPLOYMENT_TARGET "11.0") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++17") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") # 创建应用程序包 set(MACOSX_BUNDLE_BUNDLE_NAME "DTENApp") set(MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION}") set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") set(MACOSX_BUNDLE_COPYRIGHT "Copyright © 2023 My Company") set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.dten.${PROJECT_NAME}") set(MACOSX_BUNDLE_ICON_FILE "AppIcon") # 添加可执行文件 add_executable(${PROJECT_NAME} MACOSX_BUNDLE Main.cpp) # 设置目标属性 set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR} MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Mac/Info.plist XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/Mac/DTENApp.entitlements" BUNDLE True MACOSX_BUNDLE True ) # 添加资源文件 set(RESOURCE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/images/DTENApp.icns" "${CMAKE_CURRENT_SOURCE_DIR}/qml.qrc" ) # 复制资源文件到 bundle foreach(resource ${RESOURCE_FILES}) get_filename_component(resource_name ${resource} NAME) set_source_files_properties(${resource} PROPERTIES MACOSX_PACKAGE_LOCATION Resources ) target_sources(${PROJECT_NAME} PRIVATE ${resource}) endforeach() # 链接 macOS 框架 find_library(COCOA_LIBRARY Cocoa) find_library(FOUNDATION_LIBRARY Foundation) find_library(IOKIT_LIBRARY IOKit) find_library(CARBON_LIBRARY Carbon) target_include_directories(${PROJECT_NAME} PRIVATE ${DTENLog_DIR} ${DTENLog_INCLUDE_DIRS} "${ChannelMgr_INCLUDE_DIRS}" ) target_link_libraries(${PROJECT_NAME} PRIVATE ${COCOA_LIBRARY} ${FOUNDATION_LIBRARY} ${IOKIT_LIBRARY} ${CARBON_LIBRARY} ${DTENLog_LIBRARY} ${ChannelMgr_LIBRARY} ) # 添加 rpath 以便在 macOS 上找到 Qt 库 set_target_properties(${PROJECT_NAME} PROPERTIES INSTALL_RPATH "@executable_path/../Frameworks" BUILD_WITH_INSTALL_RPATH TRUE MACOSX_RPATH ON ) # 自动复制库到程序的 Frameworks 目录 add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:${PROJECT_NAME}>/../Frameworks" COMMAND ${CMAKE_COMMAND} -E copy "${DTENLog_LIBRARY}" "${ChannelMgr_LIBRARY}" "$<TARGET_FILE_DIR:${PROJECT_NAME}>/../Frameworks/" COMMENT "Copied libraries to Frameworks" ) endif() # 添加 QML 模块 qt_add_qml_module(${PROJECT_NAME} URI DTENApp VERSION 1.0 QML_FILES Main.qml RESOURCES qml.qrc SOURCES LogInit.h userdefdata.h DeviceControl.h DeviceControl.cpp DealChannelMsg.h DealChannelMsg.cpp CreateChannelMsg.h CreateChannelMsg.cpp FileInfo.h FileInfo.cpp WindowManager.h WindowManager.cpp ProcessManager.h ProcessManager.cpp TaskQueue.h TaskQueue.cpp DeviceCheck.h DeviceCheck.cpp Interface.h Interface.cpp NetworkManager.h NetworkManager.cpp NV12VideoSource.h NV12VideoSource.cpp DBManager.h DBManager.cpp CameraControl.h CameraControl.cpp UdpClient.h UdpClient.cpp ) # 链接库 target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Quick Qt6::Widgets Qt6::Sql Qt6::Multimedia ${DTENLog_LIBRARY} ${ChannelMgr_LIBRARY} ) # 添加宏定义 target_compile_definitions(${PROJECT_NAME} PRIVATE GLOG_NO_ABBREVIATED_SEVERITIES ) # 在 macOS 上添加额外的链接选项 if(APPLE) # 确保链接器能找到 Qt 框架 target_link_options(${PROJECT_NAME} PRIVATE -F${Qt6_DIR}/../../.. ) # 添加必要的框架 target_link_libraries(${PROJECT_NAME} PRIVATE "-framework AppKit" "-framework Foundation" "-framework CoreGraphics" "-framework CoreVideo" "-framework CoreMedia" "-framework OpenGL" "-framework IOKit" "-framework Carbon" ) # 查找 macdeployqt 工具 get_target_property(QMAKE_LOCATION Qt6::qmake IMPORTED_LOCATION) get_filename_component(QT_BIN_DIR "${QMAKE_LOCATION}" DIRECTORY) find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${QT_BIN_DIR}") if(MACDEPLOYQT_EXECUTABLE) message(STATUS "Found macdeployqt: ${MACDEPLOYQT_EXECUTABLE}") set(QT_MACDEPLOYQT_EXECUTABLE "${MACDEPLOYQT_EXECUTABLE}") else() message(WARNING "macdeployqt not found - manual deployment required") endif() # QML 文件部署 set(QML_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" CACHE PATH "Directory containing QML files") # 查找 QML 文件 file(GLOB_RECURSE QML_FILES "${QML_SOURCE_DIR}/*.qml" "${QML_SOURCE_DIR}/*.qmlc" ) if(QML_FILES) # 安装 QML 文件(保持目录结构) foreach(QML_FILE ${QML_FILES}) file(RELATIVE_PATH RELATIVE_QML_PATH "${QML_SOURCE_DIR}" "${QML_FILE}") get_filename_component(RELATIVE_DIR "${RELATIVE_QML_PATH}" DIRECTORY) install(FILES "${QML_FILE}" DESTINATION "${PROJECT_NAME}.app/Contents/Resources/qml/${RELATIVE_DIR}" COMPONENT Runtime ) endforeach() # 统计信息 list(LENGTH QML_FILES QML_FILES_COUNT) message(STATUS "Installed ${QML_FILES_COUNT} QML files") # 部署 QML 导入路径 execute_process( COMMAND ${QT_QMAKE_EXECUTABLE} -query QT_INSTALL_QML OUTPUT_VARIABLE QT_QML_IMPORT_PATH OUTPUT_STRIP_TRAILING_WHITESPACE ) # 修正:部署正确的 QML 模块(Widgets、Sql、Multimedia 是 C++ 库,不是 QML 模块) set(QML_MODULES_TO_DEPLOY QtQuick QtQuick/Controls QtQuick/Layouts QtMultimedia # 多媒体 QML 模块 # 添加您的项目所需的其他 QML 模块 ) foreach(MODULE ${QML_MODULES_TO_DEPLOY}) if(EXISTS "${QT_QML_IMPORT_PATH}/${MODULE}") install(DIRECTORY "${QT_QML_IMPORT_PATH}/${MODULE}" DESTINATION "${PROJECT_NAME}.app/Contents/Resources/qml" COMPONENT Runtime ) message(STATUS "Deploying QML module: ${MODULE}") else() message(WARNING "QML module not found: ${MODULE}") endif() endforeach() else() message(WARNING "No QML files found in ${QML_SOURCE_DIR} and its subdirectories") endif() # 在安装后运行 macdeployqt 以确保所有依赖项正确部署 if(QT_MACDEPLOYQT_EXECUTABLE) install(CODE " execute_process( COMMAND ${QT_MACDEPLOYQT_EXECUTABLE} \"\${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}.app\" -always-overwrite -verbose=1 -qmldir=\"${QML_SOURCE_DIR}\" WORKING_DIRECTORY \"\${CMAKE_INSTALL_PREFIX}\" RESULT_VARIABLE DEPLOY_RESULT ) if(NOT DEPLOY_RESULT EQUAL 0) message(WARNING \"macdeployqt failed with return code: \${DEPLOY_RESULT}\") else() message(STATUS \"macdeployqt completed successfully\") endif() ") endif() endif() # 安装规则 - 对于 macOS bundle if(APPLE) install(TARGETS ${PROJECT_NAME} BUNDLE DESTINATION . COMPONENT Runtime) endif() 这个是cmake文件,现在我用qt构建完成后,运行时提示 14:24:19: Starting /Users/dten/code/DTENAPP/build/Qt_6_8_1_for_macOS-Release/DTENApp.app/Contents/MacOS/DTENApp... dyld[43125]: Library not loaded: @rpath/QtQuick.framework/Versions/A/QtQuick Referenced from: <547B041F-84D0-3E82-86DA-BDE25EE00048> /Users/dten/code/DTENAPP/build/Qt_6_8_1_for_macOS-Release/DTENApp.app/Contents/MacOS/DTENApp-1.1.2.0729 Reason: tried: '/Users/dten/code/DTENAPP/build/Qt_6_8_1_for_macOS-Release/QtQuick.framework/Versions/A/QtQuick' (no such file), '/Users/dten/code/DTENAPP/thirdpart/DTENLog/lib/QtQuick.framework/Versions/A/QtQuick' (no such file), '/Users/dten/code/DTENAPP/thirdpart/ChannelMgr/mac/lib/QtQuick.framework/Versions/A/QtQuick' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtQuick.framework/Versions/A/QtQuick.framework/Versions/A/QtQuick' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtWidgets.framework/Versions/A/QtQuick.framework/Versions/A/QtQuick' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtSql.framework/Versions/A/QtQuick.framework/Versions/A/QtQuick' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtMultimedia.framework/Versions/A/QtQuick.framework/Versions/A/QtQuick' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtQmlMeta.framework/Versions/A/QtQuick.framework/Versions/A/QtQuick' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtQmlWorkerScript.framework/Versions/A/QtQuick.framework/Versions/A/QtQuick' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtQmlModels.framework/Versions/A/QtQuick.framework/Versions/A/QtQuick' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtQml.framework/Versions/A/QtQuick.framework/Versions/A/QtQuick' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtOpenGL.framework/Versions/A/QtQuick.framework/Versions/A/QtQuick' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtNetwork.framework/Versions/A/QtQuick.framework/Versions/A/QtQuick' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtGui.framework/Versions/A/QtQuick.framework/Versions/A/QtQuick' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtCore.framework/Versions/A/QtQuick.framework/Versions/A/QtQuick' (no such file), '/Users/dten/code/DTENAPP/build/Qt_6_8_1_for_macOS-Release/DTENApp.app/Contents/Frameworks/QtQuick.framework/Versions/A/QtQuick' (no such file), '/Users/dten/code/DTENAPP/build/Qt_6_8_1_for_macOS-Release/DTENApp.app/Contents/Frameworks/QtQuick.framework/Versions/A/QtQuick' (no such file) 14:24:19: The command "/Users/dten/Qt/Qt Creator.app/Contents/Resources/libexec/disclaim /Users/dten/code/DTENAPP/build/Qt_6_8_1_for_macOS-Release/DTENApp.app/Contents/MacOS/DTENApp" terminated abnormally.
09-29
cmake_minimum_required(VERSION 3.20) # 设置项目名称和版本 project(DTENApp LANGUAGES CXX VERSION 1.1.2.0729) # 设置 C++ 标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 查找 Qt6 find_package(Qt6 REQUIRED COMPONENTS Quick Widgets Sql Multimedia) qt_standard_project_setup(REQUIRES 6.5) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) # 只在 Xcode 生成器中设置代码签名 if(CMAKE_GENERATOR STREQUAL "Xcode") set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "") set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY_RELEASE "Apple Distribution") set(CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE "NO") set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "YES") endif() # 设置第三方库路径 set(DTENLog_DIR "${CMAKE_SOURCE_DIR}/thirdpart/DTENLog") set(DTENLog_INCLUDE_DIRS "${DTENLog_DIR}/include/mac") set(ChannelMgr_DIR "${CMAKE_SOURCE_DIR}/thirdpart/ChannelMgr/mac") set(ChannelMgr_INCLUDE_DIRS "${ChannelMgr_DIR}/include") # 设置库文件路径 if(APPLE) set(DTENLog_LIBRARY "${DTENLog_DIR}/lib/libglog.dylib") set(ChannelMgr_LIBRARY "${ChannelMgr_DIR}/lib/libChannelMgr.dylib") else() set(DTENLog_LIBRARY "${DTENLog_DIR}/lib/DTENLog.lib") endif() # 平台特定配置 if(WIN32) message(STATUS "Windows platform detected, configuring version info...") set(MY_VERSIONINFO_RC "${CMAKE_CURRENT_SOURCE_DIR}/VersionInfo.rc") configure_file("${CMAKE_CURRENT_SOURCE_DIR}/VersionInfo.rc.in" "${MY_VERSIONINFO_RC}") list(APPEND SOURCES ${MY_VERSIONINFO_RC}) if(MSVC) set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") endif() qt_add_executable(${PROJECT_NAME} WIN32 Main.cpp logo.rc ${MY_VERSIONINFO_RC} ) elseif(APPLE) message(STATUS "macOS platform detected, configuring bundle...") # macOS 特定设置 set(CMAKE_OSX_DEPLOYMENT_TARGET "11.0") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++17") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") # 创建应用程序包 set(MACOSX_BUNDLE_BUNDLE_NAME "DTENApp") set(MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION}") set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") set(MACOSX_BUNDLE_COPYRIGHT "Copyright © 2023 My Company") set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.dten.${PROJECT_NAME}") set(MACOSX_BUNDLE_ICON_FILE "AppIcon") # 添加可执行文件 add_executable(${PROJECT_NAME} MACOSX_BUNDLE Main.cpp) # 设置目标属性 set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR} MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Mac/Info.plist XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/Mac/DTENApp.entitlements" BUNDLE True MACOSX_BUNDLE True ) # 添加资源文件 set(RESOURCE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/images/DTENApp.icns" "${CMAKE_CURRENT_SOURCE_DIR}/qml.qrc" ) # 复制资源文件到 bundle foreach(resource ${RESOURCE_FILES}) get_filename_component(resource_name ${resource} NAME) set_source_files_properties(${resource} PROPERTIES MACOSX_PACKAGE_LOCATION Resources ) target_sources(${PROJECT_NAME} PRIVATE ${resource}) endforeach() # 链接 macOS 框架 find_library(COCOA_LIBRARY Cocoa) find_library(FOUNDATION_LIBRARY Foundation) find_library(IOKIT_LIBRARY IOKit) find_library(CARBON_LIBRARY Carbon) target_include_directories(${PROJECT_NAME} PRIVATE ${DTENLog_DIR} ${DTENLog_INCLUDE_DIRS} "${ChannelMgr_INCLUDE_DIRS}" ) target_link_libraries(${PROJECT_NAME} PRIVATE ${COCOA_LIBRARY} ${FOUNDATION_LIBRARY} ${IOKIT_LIBRARY} ${CARBON_LIBRARY} ${DTENLog_LIBRARY} ${ChannelMgr_LIBRARY} ) # 添加 rpath 以便在 macOS 上找到 Qt 库 set_target_properties(${PROJECT_NAME} PROPERTIES INSTALL_RPATH "@executable_path/../Frameworks" BUILD_WITH_INSTALL_RPATH TRUE MACOSX_RPATH ON ) # 自动复制库到程序的 Frameworks 目录 add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:${PROJECT_NAME}>/../Frameworks" COMMAND ${CMAKE_COMMAND} -E copy "${DTENLog_LIBRARY}" "${ChannelMgr_LIBRARY}" "$<TARGET_FILE_DIR:${PROJECT_NAME}>/../Frameworks/" COMMENT "Copied libraries to Frameworks" ) endif() # 添加 QML 模块 qt_add_qml_module(${PROJECT_NAME} URI DTENApp VERSION 1.0 QML_FILES Main.qml RESOURCES qml.qrc SOURCES LogInit.h userdefdata.h DeviceControl.h DeviceControl.cpp DealChannelMsg.h DealChannelMsg.cpp CreateChannelMsg.h CreateChannelMsg.cpp FileInfo.h FileInfo.cpp WindowManager.h WindowManager.cpp ProcessManager.h ProcessManager.cpp TaskQueue.h TaskQueue.cpp DeviceCheck.h DeviceCheck.cpp Interface.h Interface.cpp NetworkManager.h NetworkManager.cpp NV12VideoSource.h NV12VideoSource.cpp DBManager.h DBManager.cpp CameraControl.h CameraControl.cpp UdpClient.h UdpClient.cpp ) # 链接库 target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Quick Qt6::Widgets Qt6::Sql Qt6::Multimedia ${DTENLog_LIBRARY} ${ChannelMgr_LIBRARY} ) # 添加宏定义 target_compile_definitions(${PROJECT_NAME} PRIVATE GLOG_NO_ABBREVIATED_SEVERITIES ) # 在 macOS 上添加额外的链接选项 if(APPLE) # 确保链接器能找到 Qt 框架 target_link_options(${PROJECT_NAME} PRIVATE -F${Qt6_DIR}/../../.. ) # 添加必要的框架 target_link_libraries(${PROJECT_NAME} PRIVATE "-framework AppKit" "-framework Foundation" "-framework CoreGraphics" "-framework CoreVideo" "-framework CoreMedia" "-framework OpenGL" "-framework IOKit" "-framework Carbon" ) # 查找 macdeployqt 工具 get_target_property(QMAKE_LOCATION Qt6::qmake IMPORTED_LOCATION) get_filename_component(QT_BIN_DIR "${QMAKE_LOCATION}" DIRECTORY) find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${QT_BIN_DIR}") if(MACDEPLOYQT_EXECUTABLE) message(STATUS "Found macdeployqt: ${MACDEPLOYQT_EXECUTABLE}") set(QT_MACDEPLOYQT_EXECUTABLE "${MACDEPLOYQT_EXECUTABLE}") else() message(WARNING "macdeployqt not found - manual deployment required") endif() # QML 文件部署 set(QML_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" CACHE PATH "Directory containing QML files") # 查找 QML 文件 file(GLOB_RECURSE QML_FILES "${QML_SOURCE_DIR}/*.qml" "${QML_SOURCE_DIR}/*.qmlc" ) if(QML_FILES) # 安装 QML 文件(保持目录结构) foreach(QML_FILE ${QML_FILES}) file(RELATIVE_PATH RELATIVE_QML_PATH "${QML_SOURCE_DIR}" "${QML_FILE}") get_filename_component(RELATIVE_DIR "${RELATIVE_QML_PATH}" DIRECTORY) install(FILES "${QML_FILE}" DESTINATION "${PROJECT_NAME}.app/Contents/Resources/qml/${RELATIVE_DIR}" COMPONENT Runtime ) endforeach() # 统计信息 list(LENGTH QML_FILES QML_FILES_COUNT) message(STATUS "Installed ${QML_FILES_COUNT} QML files") # 部署 QML 导入路径 execute_process( COMMAND ${QT_QMAKE_EXECUTABLE} -query QT_INSTALL_QML OUTPUT_VARIABLE QT_QML_IMPORT_PATH OUTPUT_STRIP_TRAILING_WHITESPACE ) # 修正:部署正确的 QML 模块(Widgets、Sql、Multimedia 是 C++ 库,不是 QML 模块) set(QML_MODULES_TO_DEPLOY QtQuick QtQuick/Controls QtQuick/Layouts QtMultimedia # 多媒体 QML 模块 # 添加您的项目所需的其他 QML 模块 ) foreach(MODULE ${QML_MODULES_TO_DEPLOY}) if(EXISTS "${QT_QML_IMPORT_PATH}/${MODULE}") install(DIRECTORY "${QT_QML_IMPORT_PATH}/${MODULE}" DESTINATION "${PROJECT_NAME}.app/Contents/Resources/qml" COMPONENT Runtime ) message(STATUS "Deploying QML module: ${MODULE}") else() message(WARNING "QML module not found: ${MODULE}") endif() endforeach() else() message(WARNING "No QML files found in ${QML_SOURCE_DIR} and its subdirectories") endif() # 在安装后运行 macdeployqt 以确保所有依赖项正确部署 if(QT_MACDEPLOYQT_EXECUTABLE) install(CODE " execute_process( COMMAND ${QT_MACDEPLOYQT_EXECUTABLE} \"\${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}.app\" -always-overwrite -verbose=1 -qmldir=\"${QML_SOURCE_DIR}\" WORKING_DIRECTORY \"\${CMAKE_INSTALL_PREFIX}\" RESULT_VARIABLE DEPLOY_RESULT ) if(NOT DEPLOY_RESULT EQUAL 0) message(WARNING \"macdeployqt failed with return code: \${DEPLOY_RESULT}\") else() message(STATUS \"macdeployqt completed successfully\") endif() ") endif() endif() # 安装规则 - 对于 macOS bundle if(APPLE) install(TARGETS ${PROJECT_NAME} BUNDLE DESTINATION . COMPONENT Runtime) endif() qt6.8.1中编译完程序运行时提示 15:32:29: Starting /Users/dten/code/DTENAPP/build/Qt_6_8_1_for_macOS-Release/DTENApp.app/Contents/MacOS/DTENApp... dyld[55652]: Library not loaded: @rpath/libhidapi.dylib Referenced from: <91AF8AEB-F1DA-33E1-B108-4F701EDD58C9> /Users/dten/code/DTENAPP/thirdpart/ChannelMgr/mac/lib/libChannelMgr.dylib Reason: tried: '/Users/dten/code/DTENAPP/build/Qt_6_8_1_for_macOS-Release/libhidapi.dylib' (no such file), '/Users/dten/code/DTENAPP/thirdpart/DTENLog/lib/libhidapi.dylib' (no such file), '/Users/dten/code/DTENAPP/thirdpart/ChannelMgr/mac/lib/libhidapi.dylib' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtQuick.framework/Versions/A/libhidapi.dylib' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtWidgets.framework/Versions/A/libhidapi.dylib' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtSql.framework/Versions/A/libhidapi.dylib' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtMultimedia.framework/Versions/A/libhidapi.dylib' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtQmlMeta.framework/Versions/A/libhidapi.dylib' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtQmlWorkerScript.framework/Versions/A/libhidapi.dylib' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtQmlModels.framework/Versions/A/libhidapi.dylib' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtQml.framework/Versions/A/libhidapi.dylib' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtOpenGL.framework/Versions/A/libhidapi.dylib' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtNetwork.framework/Versions/A/libhidapi.dylib' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtGui.framework/Versions/A/libhidapi.dylib' (no such file), '/Users/dten/Qt/6.8.1/macos/lib/QtCore.framework/Versions/A/libhidapi.dylib' (no such file), '/Users/dten/code/DTENAPP/build/Qt_6_8_1_for_macOS-Release/DTENApp.app/Contents/Frameworks/libhidapi.dylib' (no such file), '/Users/dten/code/DTENAPP/build/Qt_6_8_1_for_macOS-Release/DTENApp.app/Contents/Frameworks/libhidapi.dylib' (no such file), '/Users/dten/code/DTENAPP/build/Qt_6_8_1_for_macOS-Release/DTENApp.app/Contents/Frameworks/libhidapi.dylib' (no such file) 15:32:29: The command "/Users/dten/Qt/Qt Creator.app/Contents/Resources/libexec/disclaim /Users/dten/code/DTENAPP/build/Qt_6_8_1_for_macOS-Release/DTENApp.app/Contents/MacOS/DTENApp" terminated abnormally.
最新发布
09-29
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值