From 6167a91090264a7db16411618a598e9ec6904d28 Mon Sep 17 00:00:00 2001 From: Hiroshi Miura Date: Sun, 12 Jan 2020 10:39:06 +0900 Subject: [PATCH] Simplify CMake scripts (#1162) - Simplify CMakeLists to help maintainer lazy to update when source files addition and removing. - relocate cmake include files on top Signed-off-by: Hiroshi Miura --- CMakeLists.txt | 75 ++------- CMakeSettings.json | 2 +- ...Qt.cmake.in => CPackLinuxDeployQt.cmake.in | 0 ...oyQt.cmake.in => CPackMacDeployQt.cmake.in | 0 src/Packaging.cmake => Packaging.cmake | 8 +- src/CMakeLists.txt | 157 ++---------------- 6 files changed, 33 insertions(+), 209 deletions(-) rename src/CPackLinuxDeployQt.cmake.in => CPackLinuxDeployQt.cmake.in (100%) rename src/CPackMacDeployQt.cmake.in => CPackMacDeployQt.cmake.in (100%) rename src/Packaging.cmake => Packaging.cmake (96%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 669822af..c7c4ad23 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,5 @@ cmake_minimum_required (VERSION 3.12) -project(VNote - VERSION 2.2.0 +project(VNote VERSION 2.2.0 DESCRIPTION "VNote is a markdown note taking application" HOMEPAGE_URL "https://tamlok.github.io/vnote" LANGUAGES C CXX) @@ -12,25 +11,23 @@ set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) -## Default Qt5 path -set(Qt5_DIR "$ENV{QTDIR}/lib/cmake/Qt5") -if(WIN32) - set(Qt5_DIR "c:/Qt/Qt5.9.7/5.9.7/msvc2017_64/lib/cmake/Qt5/" CACHE PATH "directory where Qt5Config.cmake exists.") -elseif(APPLE) - set(Qt5_DIR "/usr/local/Cellar/qt/5.9.7/clang_64/lib/cmake/Qt5/" CACHE PATH "directory where Qt5Config.cmake exists.") -else() - set(Qt5_DIR "" CACHE PATH "directory where Qt5Config.cmake exists.") -endif() - -find_package(Qt5 COMPONENTS Core Gui Network PrintSupport WebChannel WebEngine +# find Qt5 installation +find_package(Qt5 REQUIRED COMPONENTS Core Gui Network PrintSupport WebChannel WebEngine WebEngineWidgets Positioning Svg Widgets LinguistTools - REQUIRED NO_DEFAULT_PATH) + HINTS + "/opt/qt59/lib/cmake/Qt5/" + "c:/Qt/Qt5.9.8/5.9.8/msvc2017_64/lib/cmake/Qt5/" + "c:/Qt/Qt5.9.9/5.9.9/msvc2017_64/lib/cmake/Qt5/" + "/usr/local/Cellar/qt/5.9.8/clang_64/lib/cmake/Qt5/" + "/usr/local/Cellar/qt/5.9.9/clang_64/lib/cmake/Qt5/") + ## hoedown library add_library(hoedown STATIC hoedown/src/autolink.c hoedown/src/document.c hoedown/src/html.c hoedown/src/html_smartypants.c hoedown/src/version.c hoedown/src/buffer.c hoedown/src/escape.c hoedown/src/html_blocks.c hoedown/src/stack.c ) target_link_libraries(hoedown PRIVATE Qt5::Core Qt5::Gui) + ## peg-highlight library add_library(peg-highlight STATIC peg-highlight/pmh_parser.c peg-highlight/pmh_styleparser.c) target_link_libraries(peg-highlight PRIVATE Qt5::Core Qt5::Gui) @@ -38,54 +35,6 @@ target_link_libraries(peg-highlight PRIVATE Qt5::Core Qt5::Gui) ## project sources add_subdirectory(src) -option(CMake_RUN_CLANG_TIDY "Run clang-tidy with the compiler." OFF) -if(CMake_RUN_CLANG_TIDY) - if(CMake_SOURCE_DIR STREQUAL CMake_BINARY_DIR) - message(FATAL_ERROR "CMake_RUN_CLANG_TIDY requires an out-of-source build!") - endif() - find_program(CLANG_TIDY_COMMAND NAMES clang-tidy) - if(NOT CLANG_TIDY_COMMAND) - message(WARNING "CMake_RUN_CLANG_TIDY is ON but clang-tidy is not found!") - set(CMAKE_CXX_CLANG_TIDY "" CACHE STRING "" FORCE) - else() - set(CLANG_TIDY_CHECKS "-*,modernize-*") - set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_COMMAND};-checks=${CLANG_TIDY_CHECKS};-header-filter='${CMAKE_SOURCE_DIR}/src/*'") - endif() - - # Create a preprocessor definition that depends on .clang-tidy content so - # the compile command will change when .clang-tidy changes. This ensures - # that a subsequent build re-runs clang-tidy on all sources even if they - # do not otherwise need to be recompiled. Nothing actually uses this - # definition. We add it to targets on which we run clang-tidy just to - # get the build dependency on the .clang-tidy file. - file(SHA1 ${CMAKE_CURRENT_SOURCE_DIR}/.clang-tidy clang_tidy_sha1) - set(CLANG_TIDY_DEFINITIONS "CLANG_TIDY_SHA1=${clang_tidy_sha1}") - unset(clang_tidy_sha1) - -endif() - -option(CMake_RUN_IWYU "Run include-what-you-use with the compiler." OFF) -if(CMake_RUN_IWYU) - find_program(IWYU_COMMAND NAMES include-what-you-use iwyu) - if(NOT IWYU_COMMAND) - message(WARNING "CMake_RUN_IWYU is ON but include-what-you-use is not found!") - else() - set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE - "${IWYU_COMMAND};-Xiwyu;--mapping_file=${CMake_SOURCE_DIR}/Utilities/IWYU/mapping.imp;-w") - list(APPEND CMAKE_CXX_INCLUDE_WHAT_YOU_USE ${CMake_IWYU_OPTIONS}) - endif() -endif() - -# Clazy is a Qt oriented code checker based on clang framework. Krazy's little brother. -set(CMake_RUN_CLAZY OFF CACHE BOOL "Add clazy check for builds") -if(ENABLE_CLAZY) - find_program(CLAZY_EXECUTABLE NAMES clazy PATHS /usr/local/llvm/bin /usr/local/bin /opt/clazy/bin) - if(CLAZY_EXECUTABLE) - message(STATUS "clazy found: ${CLAZY_EXECUTABLE}") - else() - message(AUTHOR_WARNING "clazy not found.") - endif() -endif() - +include(${CMAKE_CURRENT_LIST_DIR}/Packaging.cmake) # vim: ts=2 sw=2 sts=2 et diff --git a/CMakeSettings.json b/CMakeSettings.json index e226eb36..a5e15d01 100644 --- a/CMakeSettings.json +++ b/CMakeSettings.json @@ -9,7 +9,7 @@ ], "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}", "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}", - "cmakeCommandArgs": "-DQt5_DIR=c:\\Qt\\Qt5.9.7\\5.9.7\\msvc2017_64\\lib\\cmake\\Qt5\\", + "cmakeCommandArgs": "", "buildCommandArgs": "-v", "ctestCommandArgs": "" } diff --git a/src/CPackLinuxDeployQt.cmake.in b/CPackLinuxDeployQt.cmake.in similarity index 100% rename from src/CPackLinuxDeployQt.cmake.in rename to CPackLinuxDeployQt.cmake.in diff --git a/src/CPackMacDeployQt.cmake.in b/CPackMacDeployQt.cmake.in similarity index 100% rename from src/CPackMacDeployQt.cmake.in rename to CPackMacDeployQt.cmake.in diff --git a/src/Packaging.cmake b/Packaging.cmake similarity index 96% rename from src/Packaging.cmake rename to Packaging.cmake index ce686680..1f7ed6f2 100644 --- a/src/Packaging.cmake +++ b/Packaging.cmake @@ -84,9 +84,9 @@ set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH}) set(CPACK_PACKAGE_INSTALL_DIRECTORY "vnote") -set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}/packaging") +set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}") -# set human names to exetuables +# set human names to executables set(CPACK_PACKAGE_EXECUTABLES "VNote" "VNote") set(CPACK_CREATE_DESKTOP_LINKS "VNote") set(CPACK_STRIP_FILES TRUE) @@ -168,7 +168,7 @@ elseif(APPLE) if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13) list(APPEND CPACK_GENERATOR External) message(STATUS " + macdeployqt -dmg YES ") - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CPackMacDeployQt.cmake.in "${CMAKE_BINARY_DIR}/CPackExternal.cmake") + configure_file(${CMAKE_SOURCE_DIR}/CPackMacDeployQt.cmake.in "${CMAKE_BINARY_DIR}/CPackExternal.cmake") set(CPACK_EXTERNAL_PACKAGE_SCRIPT "${CMAKE_BINARY_DIR}/CPackExternal.cmake") endif() @@ -219,7 +219,7 @@ else() linuxdeployqt("${CPACK_PACKAGE_DIRECTORY}/_CPack_Packages/Linux/AppImage" "share/applications/vnote.desktop") else() set(CPACK_GENERATOR "External;${CPACK_GENERATOR}") - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CPackLinuxDeployQt.cmake.in "${CMAKE_BINARY_DIR}/CPackExternal.cmake") + configure_file(${CMAKE_SOURCE_DIR}/CPackLinuxDeployQt.cmake.in "${CMAKE_BINARY_DIR}/CPackExternal.cmake") set(CPACK_EXTERNAL_PACKAGE_SCRIPT "${CMAKE_BINARY_DIR}/CPackExternal.cmake") endif() else() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ecb15b20..9277cf21 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,142 +1,17 @@ -add_executable(VNote main.cpp - vmainwindow.cpp - vdirectorytree.cpp - vnote.cpp - vnotebook.cpp - dialog/vnewdirdialog.cpp - vconfigmanager.cpp - vfilelist.cpp - dialog/vnewfiledialog.cpp - vedit.cpp - vdocument.cpp - utils/vutils.cpp - vpreviewpage.cpp - vstyleparser.cpp - dialog/vnewnotebookdialog.cpp - vmarkdownconverter.cpp - dialog/vnotebookinfodialog.cpp - dialog/vdirinfodialog.cpp - dialog/vfileinfodialog.cpp - veditoperations.cpp - vmdeditoperations.cpp - dialog/vinsertimagedialog.cpp - vdownloader.cpp - veditarea.cpp - veditwindow.cpp - vedittab.cpp - voutline.cpp - vsingleinstanceguard.cpp - vdirectory.cpp - vfile.cpp - vnotebookselector.cpp - vnofocusitemdelegate.cpp - vmdedit.cpp - dialog/vfindreplacedialog.cpp - dialog/vsettingsdialog.cpp - dialog/vdeletenotebookdialog.cpp - dialog/vselectdialog.cpp - vcaptain.cpp - vopenedlistmenu.cpp - vnavigationmode.cpp - vorphanfile.cpp - vcodeblockhighlighthelper.cpp - vwebview.cpp - vmdtab.cpp - vhtmltab.cpp - utils/vvim.cpp - utils/veditutils.cpp - vvimindicator.cpp - vbuttonwithwidget.cpp - vtabindicator.cpp - dialog/vupdater.cpp - dialog/vorphanfileinfodialog.cpp - vtextblockdata.cpp - utils/vpreviewutils.cpp - dialog/vconfirmdeletiondialog.cpp - vnotefile.cpp - vattachmentlist.cpp - dialog/vsortdialog.cpp - vfilesessioninfo.cpp - vtableofcontent.cpp - utils/vmetawordmanager.cpp - vmetawordlineedit.cpp - dialog/vinsertlinkdialog.cpp - vplaintextedit.cpp - vimageresourcemanager.cpp - vlinenumberarea.cpp - veditor.cpp - vmdeditor.cpp - veditconfig.cpp - vpreviewmanager.cpp - vimageresourcemanager2.cpp - vtextdocumentlayout.cpp - vtextedit.cpp - vsnippetlist.cpp - vsnippet.cpp - dialog/veditsnippetdialog.cpp - utils/vimnavigationforwidget.cpp - vtoolbox.cpp - vinsertselector.cpp - utils/vclipboardutils.cpp - vpalette.cpp - vbuttonmenuitem.cpp - utils/viconutils.cpp - lineeditdelegate.cpp - dialog/vtipsdialog.cpp - dialog/vcopytextashtmldialog.cpp - vwaitingwidget.cpp - utils/vwebutils.cpp - vlineedit.cpp - vcart.cpp - vvimcmdlineedit.cpp - vlistwidget.cpp - vsimplesearchinput.cpp - vstyleditemdelegate.cpp - vtreewidget.cpp - dialog/vexportdialog.cpp - vexporter.cpp - vsearcher.cpp - vsearch.cpp - vsearchresulttree.cpp - vsearchengine.cpp - vuniversalentry.cpp - vlistwidgetdoublerows.cpp - vdoublerowitemwidget.cpp - vsearchue.cpp - voutlineue.cpp - vhelpue.cpp - vlistfolderue.cpp - dialog/vfixnotebookdialog.cpp - vplantumlhelper.cpp - vgraphvizhelper.cpp - vlivepreviewhelper.cpp - vmathjaxpreviewhelper.cpp - vmathjaxwebdocument.cpp - vmathjaxinplacepreviewhelper.cpp - vhistorylist.cpp - vexplorer.cpp - vlistue.cpp - vuetitlecontentpanel.cpp - utils/vprocessutils.cpp - vtagpanel.cpp - valltagspanel.cpp - vtaglabel.cpp - vtagexplorer.cpp - pegmarkdownhighlighter.cpp - pegparser.cpp - peghighlighterresult.cpp - vtexteditcompleter.cpp - utils/vkeyboardlayoutmanager.cpp - dialog/vkeyboardlayoutmappingdialog.cpp - vfilelistwidget.cpp - widgets/vcombobox.cpp - vtablehelper.cpp - vtable.cpp - dialog/vinserttabledialog.cpp - isearchengine.cpp - iuniversalentry.cpp - vimagehosting.cpp - vnote.qrc translations.qrc) +add_executable(VNote main.cpp) + +file(GLOB SRC_FILES *.cpp) +file(GLOB DIALOG_SRCS dialog/*.cpp) +file(GLOB UTILS_SRCS utils/*.cpp) +file(GLOB WIDGETS_SRCS widgets/*.cpp) + +target_sources(VNote PRIVATE ${SRC_FILES}) +target_sources(VNote PRIVATE ${DIALOG_SRCS}) +target_sources(VNote PRIVATE ${UTILS_SRCS}) +target_sources(VNote PRIVATE ${WIDGETS_SRCS}) +target_sources(VNote PRIVATE vnote.qrc translations.qrc) + +include_directories(dialog utils widgets) # Qt5 libraries target_link_libraries(VNote PRIVATE Qt5::Core Qt5::WebEngine Qt5::WebEngineWidgets @@ -145,7 +20,8 @@ target_link_libraries(VNote PRIVATE Qt5::Core Qt5::WebEngine Qt5::WebEngineWidge set_property(TARGET VNote PROPERTY AUTORCC_OPTIONS "--compress;9") # Thirdparty libraries -target_include_directories(VNote PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/peg-highlight ${CMAKE_SOURCE_DIR}/hoedown) +target_include_directories(VNote PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_SOURCE_DIR}/peg-highlight ${CMAKE_SOURCE_DIR}/hoedown) target_link_libraries(VNote PRIVATE peg-highlight hoedown) # Compile options @@ -207,4 +83,3 @@ elseif(DARWIN) set_source_files_properties(${MACOSX_BUNDLE_ICON_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") endif() -include(${CMAKE_CURRENT_LIST_DIR}/Packaging.cmake)