diff --git a/CMakeLists.txt b/CMakeLists.txt index 7e523bb5..755c4455 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,10 +6,15 @@ project(notonlymodbusscope VERSION 0.0.1 ) -add_definitions("-DDEBUG") - set(SCOPESOURCE ScopeSource) +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build type" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "RelWithDebInfo" "MinSizeRel") +endif() + +message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") + set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_CXX_STANDARD 20) @@ -50,26 +55,17 @@ set(QT_LIB Qt::SerialPort ) -include_directories( - ${CMAKE_CURRENT_SOURCE_DIR}/src - ${CMAKE_CURRENT_SOURCE_DIR}/libraries -) - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") +add_compile_options(-Wall -Wextra -Werror) if (MINGW) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wa,-mbig-obj") + add_compile_options(-Wa,-mbig-obj) endif() - -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") # Code Coverage Report if(USE_GCOV) - message(STATUS "Enabling coverage") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} --coverage") + message(STATUS "Enabling coverage") + add_compile_options(--coverage) + add_link_options(--coverage) endif() endif() diff --git a/libraries/muparser/CMakeLists.txt b/libraries/muparser/CMakeLists.txt index f3c8ca90..25c404d8 100644 --- a/libraries/muparser/CMakeLists.txt +++ b/libraries/muparser/CMakeLists.txt @@ -42,7 +42,7 @@ elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic") endif() -FILE(GLOB_RECURSE MUPARSER_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp") #all .cpp +FILE(GLOB_RECURSE MUPARSER_SOURCES CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp") #all .cpp add_library(muparser ${MUPARSER_SOURCES}) # Use the headers in the build-tree or the installed ones diff --git a/scripts/build_linux.sh b/scripts/build_linux.sh index 00b55162..34d07c7a 100644 --- a/scripts/build_linux.sh +++ b/scripts/build_linux.sh @@ -4,7 +4,7 @@ set -ex mkdir -p release cd release -cmake -GNinja .. +cmake -GNinja -DCMAKE_BUILD_TYPE=Release .. ninja ctest --output-on-failure \ No newline at end of file diff --git a/scripts/build_windows.bat b/scripts/build_windows.bat index 960ceb4c..1621c3ec 100644 --- a/scripts/build_windows.bat +++ b/scripts/build_windows.bat @@ -8,7 +8,7 @@ echo %PATH% g++ -v -cmake -G "Ninja" .. +cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Release .. IF ERRORLEVEL 1 GOTO errorHandling ninja diff --git a/scripts/run_clang_tidy.sh b/scripts/run_clang_tidy.sh index 3ec738dc..ac57924e 100755 --- a/scripts/run_clang_tidy.sh +++ b/scripts/run_clang_tidy.sh @@ -7,6 +7,7 @@ SINGLE_FILE="${1:-}" echo "=== Configuring (compile_commands.json) ===" cmake -GNinja \ + -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ -DCMAKE_PREFIX_PATH="${QT_PREFIX}" \ -B "${BUILD_DIR}" diff --git a/scripts/run_clazy.sh b/scripts/run_clazy.sh index 8b106aa7..991c09c6 100755 --- a/scripts/run_clazy.sh +++ b/scripts/run_clazy.sh @@ -7,6 +7,7 @@ SINGLE_FILE="${1:-}" echo "=== Configuring (compile_commands.json) ===" cmake -GNinja \ + -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ -DCMAKE_PREFIX_PATH="${QT_PREFIX}" \ -B "${BUILD_DIR}" diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 067e6dd6..eff8bbe3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -18,10 +18,22 @@ execute_process( configure_file(${CMAKE_CURRENT_SOURCE_DIR}/util/version.h.in ${CMAKE_CURRENT_SOURCE_DIR}/util/version.h) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../resources/modbusscope.rc.in ${CMAKE_CURRENT_SOURCE_DIR}/../resources/modbusscope.rc) -FILE(GLOB_RECURSE SRCS "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/*.h") #all .cpp/.h in current "src" folder and sub folders -FILE(GLOB_RECURSE UIS "${CMAKE_CURRENT_SOURCE_DIR}/*.ui") #all .ui in current "src" folder and sub folders +file(GLOB_RECURSE SRCS CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/*.h") #all .cpp/.h in current "src" folder and sub folders +file(GLOB_RECURSE UIS CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/*.ui") #all .ui in current "src" folder and sub folders -qt_add_library (${SCOPESOURCE} STATIC ${SRCS} ${UIS}) +qt_add_library(${SCOPESOURCE} STATIC ${SRCS} ${UIS}) + +if(CMAKE_BUILD_TYPE STREQUAL "Debug") + target_compile_definitions(${SCOPESOURCE} PRIVATE DEBUG) +endif() + +target_include_directories(${SCOPESOURCE} PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR} +) + +target_include_directories(${SCOPESOURCE} SYSTEM PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/../libraries +) # Default GUI type is blank set(GUI_TYPE "") @@ -29,7 +41,7 @@ set(GUI_TYPE "") if(WIN32) set(GUI_TYPE WIN32) set(target_dir "bin/win") -elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") +elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") set(target_dir "bin/linux") else() message(SEND_ERROR "You are on an unsupported platform! (Not Win or Unix)") @@ -62,10 +74,10 @@ add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD ) # Do platform specific post target stuff -if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") +if(CMAKE_SYSTEM_NAME STREQUAL "Linux") install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin) elseif(WIN32) # not required -endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux") +endif (CMAKE_SYSTEM_NAME STREQUAL "Linux") diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index f050089a..1d1142a5 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,5 +1,3 @@ -add_definitions(-DGTEST_LANGUAGE_CXX11) - find_package(Threads REQUIRED) if ($ENV{GOOGLETEST_DIR}) @@ -16,8 +14,6 @@ else () message( FATAL_ERROR "No googletest src dir found - set GOOGLETEST_DIR to enable!") endif () -include_directories(${GTestSrc} ${GTestSrc}/include ${GMockSrc} ${GMockSrc}/include) - set( GOOGLE_TEST_SOURCE ${GTestSrc}/src/gtest-all.cc @@ -43,6 +39,8 @@ function(add_xtest_mock SOURCE_NAME) ${SOURCE_NAME}.cpp ${GOOGLE_TEST_SOURCE} ${ARGN}) + target_include_directories(${SOURCE_NAME} PRIVATE ${GTestSrc} ${GTestSrc}/include ${GMockSrc} ${GMockSrc}/include) + target_compile_definitions(${SOURCE_NAME} PRIVATE GTEST_LANGUAGE_CXX11) target_link_libraries(${SOURCE_NAME} Qt::Test Threads::Threads ${QT_LIB} ${SCOPESOURCE}) add_test(NAME ${SOURCE_NAME} COMMAND ${SOURCE_NAME}) endfunction()