Project 1: Multi-Toolchain “Hello, World”

A simple command-line “Hello, World” application, configured with CMake, that can be compiled with both the MSVC and Clang-cl toolchains.

Quick Reference

Attribute Value
Primary Language C++
Alternative Languages C
Difficulty Level 1: Beginner
Time Estimate Weekend
Knowledge Area Build Systems / Toolchain
Tooling CMake, MSVC, Clang-cl
Prerequisites Basic C++ knowledge, command-line familiarity.

What You Will Build

A simple command-line “Hello, World” application, configured with CMake, that can be compiled with both the MSVC and Clang-cl toolchains.

Why It Matters

This project builds core skills that appear repeatedly in real-world systems and tooling.

Core Challenges

  • Setting up the environment → maps to installing Visual Studio, Build Tools, and CMake
  • Writing a basic CMakeLists.txt → maps to defining a project, executable, and C++ standard
  • Generating a Visual Studio solution → maps to using CMake generators (-G "Visual Studio ...")
  • Compiling with Clang-cl → maps to specifying a toolchain with CMake (-T ClangCL)

Key Concepts

  • CMake Project Setup: CMake Documentation - cmake_minimum_required, project, add_executable
  • Visual Studio Generators: “Mastering CMake” by Kitware - Chapter 2
  • CMake Toolchains: CMake Documentation on CMAKE_TOOLCHAIN_FILE

Real-World Outcome

# Generate for MSVC (default)
> mkdir build-msvc && cd build-msvc
> cmake ..
> cmake --build .
# ./Debug/my_app.exe runs and prints "Hello, World from MSVC!"

# Generate for Clang-cl
> mkdir build-clang && cd build-clang
> cmake .. -G "Visual Studio 17 2022" -T ClangCL
> cmake --build .
# ./Debug/my_app.exe runs and prints "Hello, World from Clang!"

Implementation Guide

  1. Reproduce the simplest happy-path scenario.
  2. Build the smallest working version of the core feature.
  3. Add input validation and error handling.
  4. Add instrumentation/logging to confirm behavior.
  5. Refactor into clean modules with tests.

Milestones

  • Milestone 1: Minimal working program that runs end-to-end.
  • Milestone 2: Correct outputs for typical inputs.
  • Milestone 3: Robust handling of edge cases.
  • Milestone 4: Clean structure and documented usage.

Validation Checklist

  • Output matches the real-world outcome example
  • Handles invalid inputs safely
  • Provides clear errors and exit codes
  • Repeatable results across runs

References

  • Main guide: LEARN_WINDOWS_SYSTEMS_PROGRAMMING_CPP.md
  • “Professional C++” by Marc Gregoire (for modern C++ setup)