DefineExtractor ist ein C++20-Kommandozeilenprogramm für Windows, das Quellcode nach folgenden Mustern durchsucht:
#define-Makros in.h- und.cpp-Dateienapp.xyz-Aufrufe in.py-Dateien
Das Tool nutzt Multithreading und Memory-Mapping für effizientes Scannen großer Codebasen.
-
Automatische Header-Erkennung
- Findet
locale_inc.h(Client) sowieservice.h/commondefines.h(Server) durch rekursives Durchsuchen einschlägiger Unterordner.
- Findet
-
Makro-Listing
- Zeigt alle definierten Makros aus den erkannten Headern an, um gezielt nach einem bestimmten
#definezu suchen.
- Zeigt alle definierten Makros aus den erkannten Headern an, um gezielt nach einem bestimmten
-
Python-Parameter
- Ermittelt alle Aufrufe im Format
app.xyzinnerhalb von.py-Dateien und listet diese übersichtlich auf.
- Ermittelt alle Aufrufe im Format
-
Ausgabedateien in
Output/- Für jedes gescannte Makro bzw. jeden Python-Parameter erzeugt das Tool zwei Textdateien:
*_DEFINE.txt:#if <DEFINE>-Blöcke bzw.if app.xyz-Blöcke*_FUNC.txt: Funktionen, in denen das Define bzw. der Parameter auftaucht
- Für jedes gescannte Makro bzw. jeden Python-Parameter erzeugt das Tool zwei Textdateien:
-
Multithreading
- Dateien werden parallel auf alle verfügbaren CPU-Kerne verteilt.
- Ein Pre-Filter (
#+ Define-Name) verhindert unnötige Regex-Aufrufe auf irrelevanten Zeilen.
| Komponente | Version |
|---|---|
| Visual Studio | 2022 oder 2026 (Workload: Desktopentwicklung mit C++) |
| CMake | ≥ 3.15 (im VS-Lieferumfang enthalten) |
| C++-Standard | C++20 |
| Betriebssystem | Windows (x64) |
Das Projekt verwendet CMake mit Presets (CMakePresets.json). Zwei Konfigurationen stehen bereit: Debug und Release.
- Visual Studio starten.
- Datei → Öffnen → Ordner… → Projektordner auswählen (dort liegt
CMakeLists.txt). - VS erkennt
CMakePresets.jsonautomatisch und zeigt im Konfigurations-Dropdown:Debug (x64)→build/debug/DefineExtractor.exeRelease (x64)→build/release/DefineExtractor.exe
- Konfiguration wählen → Strg+Umschalt+B zum Bauen.
- Im Dropdown „Startobjekt auswählen" →
DefineExtractor.exewählen → F5 / Strg+F5.
:: Aus dem Projektordner:
cmake --preset debug && cmake --build --preset debug
cmake --preset release && cmake --build --preset release| Konfiguration | Pfad |
|---|---|
| Debug | build/debug/DefineExtractor.exe |
| Release | build/release/DefineExtractor.exe |
Das Projekt enthält Unit-Tests mit Catch2 v2 (Single-Header, keine externe Abhängigkeit):
cmake --preset debug && cmake --build --preset debug --target test_helpers
.\build\debug\test_helpers.exeAlle 18 Tests müssen bestehen, bevor Änderungen eingereicht werden.
DefineExtractor/
├─ DefineExtractor/
│ ├─ DefineExtractor.cpp # Hauptlogik
│ └─ helpers.h # Performance-Hilfsfunktionen (testbar)
├─ tests/
│ ├─ test_helpers.cpp # Catch2-Tests
│ └─ catch2/catch.hpp # Catch2 v2 Single-Header
├─ .github/
│ └─ dependabot.yml
├─ CMakeLists.txt
├─ CMakePresets.json # Debug- & Release-Presets
├─ HOWTO.md
├─ CONTRIBUTING.md
├─ SECURITY.md
└─ CODE_OF_CONDUCT.md
Starte DefineExtractor.exe per Doppelklick oder über CMD/PowerShell.
Lege Client-, Server- und Python-Ordner auf derselben Ebene wie den Programmordner ab:
C:\MeineProjekte\
├─ DefineExtractor\ ← EXE hier
├─ MeinClient\
├─ MeinServer\
└─ PythonStuff\
Ablauf:
- Pfad-Menü: Client, Server und Python Root setzen.
- Hauptmenü: Gewünschten Scan-Typ wählen.
- Define / Parameter auswählen → Ergebnisse landen in
Output/.
- Regex-Grenzen: Bei stark verschachtelten oder unkonventionellen Makros kann die Erkennung fehlschlagen.
- Windows-Fokus: Memory-Mapping (
MapViewOfFile) ist Windows-spezifisch; unter Linux greift eingetline-Fallback. - Keine tiefe Python-Analyse: Nur
if app.xyz-Blöcke unddef-Funktionen werden erfasst.
- Beiträge willkommen: siehe CONTRIBUTING.md
- Sicherheitslücken bitte nicht öffentlich melden: siehe SECURITY.md
- Umgangston: siehe CODE_OF_CONDUCT.md
Kein spezifischer Lizenztext enthalten. Verwendung auf eigene Verantwortung.
DefineExtractor is a Windows-oriented C++20 command-line tool that searches source code for:
#definemacros in.hand.cppfilesapp.xyzreferences in.pyfiles
It uses multithreading and memory-mapped I/O for fast scanning of large codebases.
- Automatic Header Detection — finds
locale_inc.h(Client) andservice.h/commondefines.h(Server) by recursive folder scan. - Macro Listing — displays all macros from the detected header for targeted
#definesearches. - Python Parameter Discovery — locates
app.xyzcalls in.pyfiles. - Output Files in
Output/— two files per macro or parameter:*_DEFINE.txt: matching#if … #endiforif app.xyzblocks*_FUNC.txt: functions referencing the define or parameter
- Multithreading — distributes files across all CPU cores with a fast pre-filter that skips the regex on irrelevant lines.
| Component | Version |
|---|---|
| Visual Studio | 2022 or 2026 (workload: Desktop development with C++) |
| CMake | ≥ 3.15 (bundled with VS) |
| C++ standard | C++20 |
| OS | Windows (x64) |
The project uses CMake Presets (CMakePresets.json) with two configurations: Debug and Release.
- Launch Visual Studio.
- File → Open → Folder… → select the project root (where
CMakeLists.txtlives). - VS reads
CMakePresets.jsonautomatically and shows in the configuration dropdown:Debug (x64)→build/debug/DefineExtractor.exeRelease (x64)→build/release/DefineExtractor.exe
- Select a configuration → Ctrl+Shift+B to build.
- In "Select Startup Item" choose
DefineExtractor.exe→ F5 / Ctrl+F5.
cmake --preset debug && cmake --build --preset debug
cmake --preset release && cmake --build --preset release| Configuration | Path |
|---|---|
| Debug | build/debug/DefineExtractor.exe |
| Release | build/release/DefineExtractor.exe |
Unit tests use Catch2 v2 (single-header, no external install required):
cmake --preset debug && cmake --build --preset debug --target test_helpers
.\build\debug\test_helpers.exeAll 18 tests must pass before submitting changes.
DefineExtractor/
├─ DefineExtractor/
│ ├─ DefineExtractor.cpp # core logic
│ └─ helpers.h # performance helpers (unit-tested)
├─ tests/
│ ├─ test_helpers.cpp # Catch2 tests
│ └─ catch2/catch.hpp # Catch2 v2 single-header
├─ .github/
│ └─ dependabot.yml
├─ CMakeLists.txt
├─ CMakePresets.json # Debug & Release presets
├─ HOWTO.md
├─ CONTRIBUTING.md
├─ SECURITY.md
└─ CODE_OF_CONDUCT.md
Launch DefineExtractor.exe by double-clicking or from CMD/PowerShell.
Place Client, Server, and Python folders at the same level as the program folder:
C:\MyProjects\
├─ DefineExtractor\ ← exe here
├─ MyClient\
├─ MyServer\
└─ PythonStuff\
Workflow:
- Path menu: set Client, Server, and Python Root.
- Main menu: choose the scan type.
- Select a define or parameter → results appear in
Output/.
- Regex boundaries: Highly unconventional or deeply nested macros may be missed or over-matched.
- Windows focus: Memory-mapped I/O (
MapViewOfFile) is Windows-specific; agetlinefallback is used on other platforms. - Limited Python analysis: Only
if app.xyzblocks anddeffunctions are captured.
- Contributions welcome: see CONTRIBUTING.md
- Security issues — do not file public issues: see SECURITY.md
- Community standards: see CODE_OF_CONDUCT.md
No specific license is included. Use at your own risk.