|
1 | 1 | cmake_minimum_required(VERSION 3.20) |
| 2 | +cmake_policy(SET CMP0135 NEW) |
2 | 3 | project(HowUtility VERSION 1.0 LANGUAGES CXX) |
3 | 4 |
|
4 | 5 | set(CMAKE_CXX_STANDARD 20) |
@@ -30,8 +31,6 @@ endif() |
30 | 31 |
|
31 | 32 | # Fetch dependencies (downloads may take a moment on first configure) |
32 | 33 | include(FetchContent) |
33 | | -set(FETCHCONTENT_QUIET OFF) |
34 | | - |
35 | 34 | message(STATUS "Fetching nlohmann/json 3.12.0...") |
36 | 35 | set(JSON_Install OFF CACHE BOOL "" FORCE) |
37 | 36 | FetchContent_Declare(json |
@@ -74,6 +73,46 @@ if(BUILD_TESTS) |
74 | 73 |
|
75 | 74 | include(GoogleTest) |
76 | 75 | gtest_discover_tests(how_tests) |
| 76 | + |
| 77 | + # 'make test' rebuilds before running tests |
| 78 | + add_custom_target(check |
| 79 | + COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure |
| 80 | + DEPENDS how_tests |
| 81 | + ) |
| 82 | +endif() |
| 83 | + |
| 84 | +# Optional clang-tidy target |
| 85 | +file(GLOB_RECURSE ALL_SOURCES src/*.cpp include/*.h) |
| 86 | +find_program(CLANG_TIDY clang-tidy |
| 87 | + HINTS /opt/homebrew/opt/llvm/bin /usr/local/opt/llvm/bin) |
| 88 | +if(CLANG_TIDY) |
| 89 | + # When using Homebrew clang-tidy with Apple Clang, pass the SDK path |
| 90 | + set(CLANG_TIDY_EXTRA_ARGS "") |
| 91 | + if(APPLE) |
| 92 | + execute_process(COMMAND xcrun --show-sdk-path OUTPUT_VARIABLE SDKROOT OUTPUT_STRIP_TRAILING_WHITESPACE) |
| 93 | + set(CLANG_TIDY_EXTRA_ARGS "--extra-arg=-isysroot${SDKROOT}") |
| 94 | + endif() |
| 95 | + add_custom_target(tidy |
| 96 | + COMMAND ${CLANG_TIDY} -p ${CMAKE_BINARY_DIR} ${CLANG_TIDY_EXTRA_ARGS} ${ALL_SOURCES} |
| 97 | + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} |
| 98 | + COMMENT "Running clang-tidy..." |
| 99 | + ) |
| 100 | +endif() |
| 101 | + |
| 102 | +# Optional clang-format target |
| 103 | +find_program(CLANG_FORMAT clang-format |
| 104 | + HINTS /opt/homebrew/opt/llvm/bin /usr/local/opt/llvm/bin) |
| 105 | +if(CLANG_FORMAT) |
| 106 | + add_custom_target(format |
| 107 | + COMMAND ${CLANG_FORMAT} -i ${ALL_SOURCES} |
| 108 | + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} |
| 109 | + COMMENT "Running clang-format..." |
| 110 | + ) |
| 111 | + add_custom_target(format-check |
| 112 | + COMMAND ${CLANG_FORMAT} --dry-run --Werror ${ALL_SOURCES} |
| 113 | + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} |
| 114 | + COMMENT "Checking clang-format..." |
| 115 | + ) |
77 | 116 | endif() |
78 | 117 |
|
79 | 118 | # Install |
|
0 commit comments