Skip to content
Snippets Groups Projects
CMakeLists.txt 2.58 KiB
Newer Older
  • Learn to ignore specific revisions
  • Tomáš Kořistka's avatar
    Tomáš Kořistka committed
    cmake_minimum_required(VERSION 3.0)
    
    
    set(CMAKE_CXX_STANDARD 17)
    
    
    Tomáš Kořistka's avatar
    Tomáš Kořistka committed
    set(TARGET_NAME Querying)
    
    Tomáš Kořistka's avatar
    Tomáš Kořistka committed
    project(${TARGET_NAME})
    
    # Check the build type and ask the user to set concrete one
    if (NOT CMAKE_BUILD_TYPE)
        set(CMAKE_BUILD_TYPE RelWithDebInfo)
        message(WARNING "CMAKE_BUILD_TYPE is not set, forcing to RelWithDebInfo")
    endif ()
    
    # Set compiler flags
    if (${CMAKE_CXX_COMPILER_ID} MATCHES "GNU" OR ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
        set(CMAKE_CXX_FLAGS "-std=c++17 -Wall -Wextra")
        set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3")
        set(CMAKE_CXX_FLAGS_RELEASE "-O3")
        set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g3")
        set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os")
    endif ()
    
    find_package(Qt5Widgets REQUIRED)
    find_package(Qt5Network REQUIRED)
    
    include_directories(
            ${CMAKE_CURRENT_BINARY_DIR}
            ${CMAKE_CURRENT_SOURCE_DIR}
    )
    
    # Instruct CMake to run moc automatically when needed
    set(CMAKE_AUTOMOC ON)
    
    # Add subdirectory SQLiteCpp with all necessary files
    add_subdirectory(lib/SQLiteCpp)
    
    
    # Source files
    set(SOURCES
    
            src/ui_wt/MainPage.cpp
    
    Tomáš Kořistka's avatar
    Tomáš Kořistka committed
            src/ui/forms/mainform.cpp
            src/ui/widgets/textedit.cpp
    
    weirdwizardthomas's avatar
    weirdwizardthomas committed
            src/calculation/InvertedIndex.cpp src/calculation/InvertedIndex.h
            src/util/InvertedIndexJSONParser.cpp src/util/InvertedIndexJSONParser.h
            src/calculation/Space.cpp src/calculation/Space.h
            src/calculation/Query.cpp src/calculation/Query.h
            src/calculation/Computor.cpp src/calculation/Computor.h
    
            src/calculation/WeightedDocument.cpp src/calculation/WeightedDocument.h
    
    weirdwizardthomas's avatar
    weirdwizardthomas committed
            src/util/QueryJSONParser.cpp src/util/QueryJSONParser.h
    
    Tomáš Kořistka's avatar
    Tomáš Kořistka committed
            src/exceptions/Exceptions.h
    
            src/database/DocumentCollection.cpp src/database/DocumentCollection.h src/util/ArgumentParser.cpp src/util/ArgumentParser.h src/database/Document.cpp src/database/Document.h)
    
    Tomáš Kořistka's avatar
    Tomáš Kořistka committed
    
    # User interface files
    set(FORMS
            src/ui/forms/mainform.ui
            )
    
    # Resource files
    set(RESOURCES
            resources.qrc
            )
    
    # Shared libraries
    set(LIBRARIES
            Qt5::Widgets
            Qt5::Network
            SQLiteCpp
    
    Tomáš Kořistka's avatar
    Tomáš Kořistka committed
            )
    
    # Generate additional sources with MOC and UIC
    qt5_wrap_ui(UIC_SOURCES ${FORMS})
    qt5_add_resources(RCC_SOURCES ${RESOURCES})
    
    # Set target
    add_executable(${TARGET_NAME} ${SOURCES} ${HEADERS} ${UIC_SOURCES} ${RCC_SOURCES})
    
    # Link with libraries
    target_link_libraries(${TARGET_NAME} ${LIBRARIES})
    
    Tomáš Kořistka's avatar
    Tomáš Kořistka committed
    # Installation
    install(TARGETS ${TARGET_NAME} RUNTIME DESTINATION bin)
    install(FILES resources/${TARGET_NAME}.png DESTINATION share/icons/hicolor/48x48/apps)
    install(FILES ${TARGET_NAME}.desktop DESTINATION share/applications)