cmake_minimum_required(VERSION 3.28)
set(projectName "MyDocumentViewer")
project(${projectName} VERSION 1.0.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 26)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_PREFIX_PATH "D:/platform/qt601/sources/6.6.1/mingw_64/lib/cmake")
set(CLION_INSTALL_PATH "D:/tool/CLion 2023.3")
add_executable(${projectName} main.cpp)
find_package(Qt6 COMPONENTS
Core
Gui
Widgets
REQUIRED)
target_link_libraries(${projectName}
Qt::Core
Qt::Gui
Qt::Widgets
)
set_target_properties(${projectName} PROPERTIES
WIN32_EXECUTABLE ON
MACOSX_BUNDLE ON
)
if (WIN32 AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
set(DEBUG_SUFFIX)
if (MSVC AND CMAKE_BUILD_TYPE MATCHES "Debug")
set(DEBUG_SUFFIX "d")
endif ()
set(QT_INSTALL_PATH "${CMAKE_PREFIX_PATH}")
if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
endif ()
endif ()
if (EXISTS "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll"
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/")
endif ()
foreach (QT_LIB Core Gui Widgets)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${QT_INSTALL_PATH}/bin/Qt6${QT_LIB}${DEBUG_SUFFIX}.dll"
"$<TARGET_FILE_DIR:${PROJECT_NAME}>")
endforeach (QT_LIB)
endif ()
file(GLOB DLL_FILES "${CLION_INSTALL_PATH}/bin/mingw/bin/*.dll")
foreach(DLL_FILE ${DLL_FILES})
file(COPY ${DLL_FILE} DESTINATION ${CMAKE_BINARY_DIR})
endforeach()
解释下后面的依托:
if (WIN32 AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
set(DEBUG_SUFFIX)
if (MSVC AND CMAKE_BUILD_TYPE MATCHES "Debug")
set(DEBUG_SUFFIX "d")
endif ()
set(QT_INSTALL_PATH "${CMAKE_PREFIX_PATH}")
if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
endif ()
endif ()
if (EXISTS "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll"
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/")
endif ()
foreach (QT_LIB Core Gui Widgets)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${QT_INSTALL_PATH}/bin/Qt6${QT_LIB}${DEBUG_SUFFIX}.dll"
"$<TARGET_FILE_DIR:${PROJECT_NAME}>")
endforeach (QT_LIB)
endif ()
复制 foreach (QT_LIB Core Gui Widgets)里的.dll和plugun/windows.dll,并不好用,建议用toolChain
file(GLOB DLL_FILES "${CLION_INSTALL_PATH}/bin/mingw/bin/*.dll")
foreach(DLL_FILE ${DLL_FILES})
file(COPY ${DLL_FILE} DESTINATION ${CMAKE_BINARY_DIR})
endforeach()
复制链接库
如果要分文件夹:
add_subdirectory(src)
add_subdirectory(resources)
./src:
set(PROJECT_SOURCES
main.cpp
)
qt_add_executable(${projectName}
# MANUAL_FINALIZATION
${PROJECT_SOURCES}
)
./resources:
set(SOURCES_FILES
ic.png
ico.ico
)
foreach (file ${SOURCES_FILES})
configure_file(${file} ${CMAKE_CURRENT_BINARY_DIR}/${file} COPYONLY)
endforeach ()
for qml:
cmake_minimum_required(VERSION 3.16)
set(projectName ctestqml01)
project(${projectName} VERSION 0.1 LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_PREFIX_PATH "E:\\platform\\qt6.8\\6.8.0\\mingw_64\\lib\\cmake")
set(CLION_INSTALL_PATH "E:\\tool\\jetbrains\\CLion 2024.1.1")
find_package(Qt6 6.5 REQUIRED COMPONENTS Quick)
qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(app${projectName}
main.cpp
)
qt_add_qml_module(app${projectName}
URI ${projectName}
VERSION 1.0
QML_FILES
Main.qml
)
# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
set_target_properties(app${projectName} PROPERTIES
# MACOSX_BUNDLE_GUI_IDENTIFIER com.example.app${projectName}
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
MACOSX_BUNDLE TRUE
WIN32_EXECUTABLE TRUE
)
target_link_libraries(app${projectName}
PRIVATE Qt6::Quick
)
include(GNUInstallDirs)
install(TARGETS app${projectName}
BUNDLE DESTINATION .
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
file(GLOB DLL_FILES "${CLION_INSTALL_PATH}/bin/mingw/bin/*.dll")
foreach(DLL_FILE ${DLL_FILES})
file(COPY ${DLL_FILE} DESTINATION ${CMAKE_BINARY_DIR})
endforeach()
评论区