da43859b97
Layout, Build und Konventionen analog zu mydb und cxx_scaffold_cli: Header und Quellen nebeneinander in playground/, Unit-Tests als .test.c/.test.cpp daneben, Integrationstests in tests/. Geruest-Module counter (C, Unity) und notebook (C++, doctest) zeigen jede Regel einmal an lauffaehigem Code. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
65 lines
2.2 KiB
CMake
65 lines
2.2 KiB
CMake
# ---------------------------------------------------------------------------
|
|
# Warnungen als INTERFACE-Target.
|
|
#
|
|
# Als Target und nicht als globales CMAKE_C_FLAGS, damit der vendorte Code in
|
|
# third_party/ die Warnungen NICHT abbekommt: unity.c und doctest.h sind nicht
|
|
# unser Code, und -Wconversion darauf ergibt nur Rauschen.
|
|
#
|
|
# Kein -Werror (bewusste Entscheidung): waehrend eines TDD-Zyklus soll ein
|
|
# unbenutztes Argument den Build nicht blockieren. Warnungen werden trotzdem
|
|
# live in Neovim angezeigt, weil clangd sie ohnehin liefert.
|
|
# ---------------------------------------------------------------------------
|
|
|
|
add_library(playground_warnings INTERFACE)
|
|
|
|
set(PLAYGROUND_GCC_LIKE_WARNINGS
|
|
-Wall
|
|
-Wextra
|
|
-Wpedantic
|
|
|
|
# Shadowing ist in C mit kurzen Namen (p, h, s) eine echte Fehlerquelle.
|
|
-Wshadow
|
|
|
|
# Implizite Verengungen (size_t -> uint16_t und aehnliches). Explizite
|
|
# Casts -- (uint16_t) len -- schweigen weiterhin, implizite nicht.
|
|
-Wconversion
|
|
-Wsign-conversion
|
|
|
|
-Wcast-qual
|
|
-Wdouble-promotion
|
|
-Wformat=2
|
|
-Wundef
|
|
-Wunused
|
|
-Wnull-dereference
|
|
-Wimplicit-fallthrough
|
|
|
|
-Warray-bounds
|
|
)
|
|
|
|
# Bewusst NICHT dabei: -Wcast-align.
|
|
#
|
|
# Uebernommen aus dem Hausstandard: clang warnt bereits, wenn ein uint8_t* auf
|
|
# einen ausgerichteten Typ gecastet wird, unabhaengig davon, wie der Puffer
|
|
# tatsaechlich ausgerichtet ist -- also auch auf korrektem Code. Wer hier mit
|
|
# rohen Puffern experimentiert, sichert die Ausrichtung im Code zu
|
|
# (alignas(...)), wo sie ueberpruefbar ist.
|
|
|
|
set(PLAYGROUND_C_ONLY_WARNINGS
|
|
# Ein () statt (void) in C ist eine Funktion mit unbekannten Parametern --
|
|
# in C23 zwar geheilt, aber die Warnung haelt aelteren Code ehrlich.
|
|
-Wstrict-prototypes
|
|
-Wmissing-prototypes
|
|
-Wold-style-definition
|
|
)
|
|
|
|
set(PLAYGROUND_CXX_ONLY_WARNINGS
|
|
-Wnon-virtual-dtor
|
|
-Woverloaded-virtual
|
|
-Wold-style-cast
|
|
)
|
|
|
|
target_compile_options(playground_warnings INTERFACE
|
|
$<$<COMPILE_LANG_AND_ID:C,GNU,Clang,AppleClang>:${PLAYGROUND_GCC_LIKE_WARNINGS};${PLAYGROUND_C_ONLY_WARNINGS}>
|
|
$<$<COMPILE_LANG_AND_ID:CXX,GNU,Clang,AppleClang>:${PLAYGROUND_GCC_LIKE_WARNINGS};${PLAYGROUND_CXX_ONLY_WARNINGS}>
|
|
)
|