deargui-vpl/docs/console-variants.md

3.4 KiB

Console Application Variants

Overview

The project now supports building both GUI and console variants of applications on Windows. This is useful for debugging, automation, or when you need console output visible by default.

Build Configuration

CMake Option

The BUILD_CONSOLE_VARIANTS option (default: ON) controls whether console variants are built:

# Build with console variants (default)
cmake -S examples -B build -G "Visual Studio 16 2019" -A x64

# Build without console variants
cmake -S examples -B build -G "Visual Studio 16 2019" -A x64 -DBUILD_CONSOLE_VARIANTS=OFF

What Gets Built

When BUILD_CONSOLE_VARIANTS=ON on Windows:

  • GUI Application: blueprints-example_d.exe (Debug) / blueprints-example.exe (Release)

    • Windows GUI application (subsystem: WINDOWS)
    • Console attaches to parent process if launched from terminal
    • Creates its own console window if no parent console exists
  • Console Application: blueprints-example-console_d.exe (Debug) / blueprints-example-console.exe (Release)

    • Windows console application (subsystem: CONSOLE)
    • Always shows console window
    • Better for debugging and automation

Usage

Running the Console Variant

From PowerShell:

# Build
sh ./scripts/build.sh

# Run console variant
./build/bin/blueprints-example-console_d.exe

# Run with arguments
./build/bin/blueprints-example-console_d.exe --file "myfile.json"

From Command Prompt:

build\bin\blueprints-example-console_d.exe

Visual Studio

Both targets appear in the solution (build\imgui-node-editor.sln):

  • blueprints-example - GUI application
  • blueprints-example-console - Console application

By default, blueprints-example-console is set as the startup project, so you can just press F5 to debug the console variant.

To change the default startup project:

# Use GUI variant as startup project
cmake -S examples -B build -DUSE_CONSOLE_AS_STARTUP=OFF

# Use console variant as startup project (default)
cmake -S examples -B build -DUSE_CONSOLE_AS_STARTUP=ON

Or manually in Visual Studio: Right-click either project and select "Set as StartUp Project".

Differences

Feature GUI Variant Console Variant
Subsystem WINDOWS CONSOLE
Console Window Only if attached/allocated Always visible
Entry Point WinMain() main()
Use Case Normal usage Debugging, automation
Logging Visible if launched from console Always visible

Implementation Details

  • Both variants share the same source code
  • The console variant defines _CONSOLE, which triggers the main() entry point in entry_point.cpp
  • The GUI variant uses WinMain() and includes logic to attach/allocate console when needed
  • All command-line arguments work the same in both variants

When to Use Console Variant

  • Debugging: See printf/std::cout output immediately
  • Automation: Easier to capture stdout/stderr in scripts
  • Testing: Better integration with CI/CD pipelines
  • Development: Quicker access to logs without checking files

When to Use GUI Variant

  • Distribution: Normal end-user deployment
  • Production: Cleaner user experience without console window
  • Default: Standard usage for GUI applications