cmake_minimum_required(VERSION 3.5) project(PowerModeler VERSION 0.1 LANGUAGES CXX) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Sql) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Svg) #默认ui文件要和.h头文件在一个目录,若不在一个目录,需要指定其所在目录 set(CMAKE_AUTOUIC_SEARCH_PATHS "ui") set(H_HEADER_FILES include/global.h include/logger.h include/mainwindow.h include/dbManager.h include/dbBrowser.h include/dbStructureNode.h include/dbStructureModel.h include/dbStructureView.h include/connectionDialog.h include/messageDialog.h include/messageBox.h include/settings.h include/tableWidgetHoverDelegate.h include/textColorPreserveDelegate.h include/customMenu.h include/multiLineHeaderView.h include/modelInfoEditDialog.h include/sqlQueryExecutor.h include/attributeNamespace.h include/attributeTableModel.h include/attributeTableDelegate.h include/attributeView.h include/attributeSelector.h include/maskLayer.h include/maskManager.h include/customBorderContainer.h include/groupSelectionDialog.h include/dataSyncManager.h include/importExportManager.h ) set(CPP_SOURCE_FILES source/main.cpp source/global.cpp source/logger.cpp source/mainwindow.cpp source/dbManager.cpp source/dbBrowser.cpp source/dbStructureNode.cpp source/dbStructureModel.cpp source/dbStructureView.cpp source/connectionDialog.cpp source/messageDialog.cpp source/messageBox.cpp source/settings.cpp source/tableWidgetHoverDelegate.cpp source/textColorPreserveDelegate.cpp source/customMenu.cpp source/multiLineHeaderView.cpp source/modelInfoEditDialog.cpp source/sqlQueryExecutor.cpp source/attributeTableModel.cpp source/attributeTableDelegate.cpp source/attributeView.cpp source/attributeSelector.cpp source/maskLayer.cpp source/maskManager.cpp source/customBorderContainer.cpp source/groupSelectionDialog.cpp source/dataSyncManager.cpp source/importExportManager.cpp ) set(UI_FILES ui/mainwindow.ui ui/dbBrowser.ui ui/connectionDialog.ui ui/messageDialog.ui ui/modelInfoEditDialog.ui ui/textEditWidget.ui ui/attributeSelector.ui ui/groupSelectionDialog.ui ) if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) qt_add_executable(PowerModeler MANUAL_FINALIZATION ${H_HEADER_FILES} ${CPP_SOURCE_FILES} ${UI_FILES} resource/PowerModeler.qrc ) # Define target properties for Android with Qt 6 as: # set_property(TARGET PowerModeler APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR # ${CMAKE_CURRENT_SOURCE_DIR}/android) # For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation else() if(ANDROID) add_library(PowerModeler SHARED ${H_HEADER_FILES} ${CPP_SOURCE_FILES} ${UI_FILES} resource/PowerModeler.qrc ) # Define properties for Android with Qt 5 after find_package() calls as: # set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android") else() add_executable(PowerModeler ${H_HEADER_FILES} ${CPP_SOURCE_FILES} ${UI_FILES} resource/PowerModeler.qrc ) endif() endif() target_include_directories(PowerModeler PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include") target_link_libraries(PowerModeler PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Gui Qt${QT_VERSION_MAJOR}::Sql Qt${QT_VERSION_MAJOR}::Svg) # 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. if(${QT_VERSION} VERSION_LESS 6.1.0) set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.PowerModeler) endif() set_target_properties(PowerModeler PROPERTIES ${BUNDLE_ID_OPTION} MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} MACOSX_BUNDLE TRUE WIN32_EXECUTABLE TRUE ) include(GNUInstallDirs) install(TARGETS PowerModeler BUNDLE DESTINATION . LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) #配置文件 set(CONFIG_FILE "app_config.ini") set(CONFIG_FILE_DIR "${CMAKE_BINARY_DIR}") if(NOT EXISTS "${CONFIG_FILE_DIR}/${CONFIG_FILE}") file(COPY app_config.ini DESTINATION "${CONFIG_FILE_DIR}") else() message(STATUS "${CONFIG_FILE} already exists, skipping copy") endif() if(QT_VERSION_MAJOR EQUAL 6) qt_finalize_executable(PowerModeler) endif()