记录使⽤CMake构建Qt⼯程并⾃动发布的基本⽅法
记录使⽤ CMake 构建 Qt ⼯程并⾃动发布的基本⽅法
QtCreator 已经提供了 CMake 构建 Qt ⼯程的模板,只需要在 QtCreator 新建项⽬时选择 CMake 作为构建系统即可。燃鹅想要这个⼯程在其他 IDE(MSVC / XCode) 中愉快的编译和调试的话,上述的模板是不够的。我们还需要向 ⾥⾯添加发布相关的代码,使其在编译之后⾃动拷贝 Qt 相关的库⽂件。
以下是我整理出来的⼀个基础模板:
cmake_minimum_required (VERSION 3.8)
project(YourProjectName)
list(APPEND CMAKE_PREFIX_PATH "Your/Qt/Install/Directory/Contains/bin/And/lib")
# 开启⾃动 moc / rcc / uic
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
# 指定 c++11 标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 将当前⽬录加⼊包含⽬录
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# 寻 Qt 库
find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
# 定义源⽂件
file(GLOB SRC_FILES "YourSrc.h YourSrc.cpp YourUiSrc.ui")
# 查 windeployqt / macdeployqt ⽂件
get_target_property(_qmake_executable Qt${QT_VERSION_MAJOR}::qmake IMPORTED_LOCATION)
get_filename_component(_qt_bin_dir "${_qmake_executable}" DIRECTORY)
find_program(DEPLOYQT_EXECUTABLE NAMES windeployqt macdeployqt HINTS "${_qt_bin_dir}")
# 平台相关的编译选项
if(APPLE)
add_executable(${PROJECT_NAME} MACOSX_BUNDLE ${SRC_FILES})
configure_file(${CMAKE_SOURCE_DIR}/Info.plist.in ${CMAKE_BINARY_DIR}/Info.plist)
set_target_properties(${PROJECT_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CM
AKE_BINARY_DIR}/Info.plist)
# ⾃动调⽤ macdeployqt
add_custom_command(TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND ${DEPLOYQT_EXECUTABLE} "$<TARGET_BUNDLE_DIR:${PROJECT_NAME}>" -qmldir=${CMAKE_SOURCE_DIR}
)
elseif(WIN32)
add_executable(${PROJECT_NAME} WIN32 ${SRC_FILES})
# ⾃动调⽤ windeployqt
add_custom_command(TARGET ${PROJECT_NAME}
xcode入门
POST_BUILD
COMMAND ${DEPLOYQT_EXECUTABLE} "$<TARGET_FILE:${PROJECT_NAME}>"
$<$<CONFIG:Debug>:--debug> --qmldir ${CMAKE_SOURCE_DIR}
)
endif()
target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
如果你的项⽬还⽤到其他的动态库,就需要⾃⾏添加编译和链接相关的代码,以及编译后⾃动拷贝动态库的代码。这个模板我在以下 IDE 中测试通过:
Microsoft Visual Studio Enterprise 2022 Preview (64 位)
Qt Creator 4.13.1 (Windows)
本⽂可能会在后续的开发和验证过程中随时更新

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。