Proyek nyata terdiri atas banyak file dan library eksternal. Kita menata header dan linking, menulis Makefile, lalu beralih ke CMake dan ctest, mengelola dependensi dengan vcpkg dan Conan, serta menyusun project layout yang rapi.

# Header dan Source Files

Pembagian kode ke file .h dan .cpp — apa yang boleh di header, apa yang harus di source file, dan aturan include yang minimal.

Buka →
# Declaration vs Definition

Perbedaan deklarasi dan definisi, variabel extern, aturan ODR, plus dua kasus khusus: const di header dan fungsi static.

Buka →
# Include Guards

Mengapa header perlu pelindung dari double include — pola #ifndef/#define/#endif, penamaan guard yang unik, dan demonstrasi error tanpa pelindung.

Buka →
# pragma once

Satu baris pengganti include guard — cara kerja #pragma once, portabilitasnya di compiler utama, dan kapan memilih mana.

Buka →
# Separate Compilation

Model kompilasi terpisah C++ — translation unit, dari .cpp ke object file lalu link, dan kenapa incremental build penting.

Buka →
# Linking dan Symbols

Bagaimana linker menyatukan object file lewat simbol — defined vs undefined, tool nm, dan anatomi error undefined reference.

Buka →
# Static dan Dynamic Libraries

Membuat static library (.a) dengan ar dan dynamic library (.so) dengan -fPIC -shared — lengkap dengan cara link, menjalankan, dan kapan memilih masing-masing.

Buka →
# Make dan Makefile

Otomatisasi build dengan make — target, dependencies, recipe, variabel, pattern rule, dan incremental build yang kita jalankan sungguhan.

Buka →
# CMake

Arsitektur CMake — generator yang menghasilkan build system native, CMakeLists.txt minimal, alur configure-build, dan cara memasangnya.

Buka →
# CMake Targets

Vokabuler inti CMake — add_executable, add_library, target_link_libraries, dan target_include_directories dengan properti modern per target.

Buka →
# CMake Dependencies

Tiga jalur resmi CMake untuk menarik library dari luar proyek — add_subdirectory, find_package, dan FetchContent — beserta cara kerja dan kapan masing-masing dipakai.

Buka →
# Package Management dengan vcpkg

vcpkg sebagai manajer paket C++ — pemasangan, mode klasik vs manifest vcpkg.json, integrasi toolchain dengan CMake, dan kapan vcpkg menjadi pilihan tepat.

Buka →
# Package Management dengan Conan

Conan sebagai manajer paket C++ berbasis profil — conanfile.txt dan conanfile.py, conan install, integrasi CMake lewat generator, dan perbandingannya dengan vcpkg.

Buka →
# Dependency Management

Strategi mengelola dependensi C++ — vendor, git submodule, package manager, FetchContent — beserta trade-offs, ringkasan Semantic Versioning, dan prinsip minimal dependencies.

Buka →
# CTest

CTest sebagai pelari tes bawaan CMake — anatomi program tes, enable_testing dan add_test, plus test runner mini yang dijalankan sungguhan di lingkungan praktikum.

Buka →
# CI dan Otomasi Build

Memindahkan rangkaian build-tes-lapor ke mesin lain: pipeline GitHub Actions untuk C++ dengan matrix compiler, cache, sanitizer, lint, dan artefak, plus skrip CI mini yang dijalankan sungguhan.

Buka →
# Build Types dan Optimization

Debug vs Release — tingkat optimasi -O0 sampai -Os, informasi debug -g, dan bagaimana NDEBUG membuat assert ikut menghilang di build release, semuanya diuji di lingkungan praktikum.

Buka →
# Project Layout

Susunan folder proyek C++ — include, src, tests, docs, build — aturan penempatan header, flat vs nested, dan rangkuman penutup section Build System dan Project Structure.

Buka →