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.
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 DefinitionPerbedaan deklarasi dan definisi, variabel extern, aturan ODR, plus dua kasus khusus: const di header dan fungsi static.
Buka → # Include GuardsMengapa header perlu pelindung dari double include — pola #ifndef/#define/#endif, penamaan guard yang unik, dan demonstrasi error tanpa pelindung.
Buka → # pragma onceSatu baris pengganti include guard — cara kerja #pragma once, portabilitasnya di compiler utama, dan kapan memilih mana.
Buka → # Separate CompilationModel kompilasi terpisah C++ — translation unit, dari .cpp ke object file lalu link, dan kenapa incremental build penting.
Buka → # Linking dan SymbolsBagaimana linker menyatukan object file lewat simbol — defined vs undefined, tool nm, dan anatomi error undefined reference.
Buka → # Static dan Dynamic LibrariesMembuat 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 MakefileOtomatisasi build dengan make — target, dependencies, recipe, variabel, pattern rule, dan incremental build yang kita jalankan sungguhan.
Buka → # CMakeArsitektur CMake — generator yang menghasilkan build system native, CMakeLists.txt minimal, alur configure-build, dan cara memasangnya.
Buka → # CMake TargetsVokabuler inti CMake — add_executable, add_library, target_link_libraries, dan target_include_directories dengan properti modern per target.
Buka → # CMake DependenciesTiga 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 vcpkgvcpkg 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 ConanConan sebagai manajer paket C++ berbasis profil — conanfile.txt dan conanfile.py, conan install, integrasi CMake lewat generator, dan perbandingannya dengan vcpkg.
Buka → # Dependency ManagementStrategi mengelola dependensi C++ — vendor, git submodule, package manager, FetchContent — beserta trade-offs, ringkasan Semantic Versioning, dan prinsip minimal dependencies.
Buka → # CTestCTest 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 BuildMemindahkan 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 OptimizationDebug 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 LayoutSusunan folder proyek C++ — include, src, tests, docs, build — aturan penempatan header, flat vs nested, dan rangkuman penutup section Build System dan Project Structure.
Buka →