Title: πŸ› οΈ Build β€” Make/CMake/Meson Group: Dev & Tools Icon: πŸ› οΈ Order: 5 ## Table of Contents - [Make](#-make--традиционная-сборка) - [CMake](#-cmake--соврСмСнная-сборка) - [Meson](#-meson--быстрая-сборка) - [Ninja](#-ninja--backend-сборка) - [Configure Options](#-configure-options--ΠΎΠΏΡ†ΠΈΠΈ-ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ) - [Troubleshooting](#-troubleshooting--устранСниС-Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ) - [Real-World Examples](#-real-world-examples--ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹-ΠΈΠ·-ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ) --- # πŸ”¨ Make / Врадиционная сборка ### Basic Usage / Π‘Π°Π·ΠΎΠ²ΠΎΠ΅ использованиС make # Build default target / Π‘Π±ΠΎΡ€ΠΊΠ° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ†Π΅Π»ΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ make all # Build all targets / Π‘ΠΎΠ±Ρ€Π°Ρ‚ΡŒ всС Ρ†Π΅Π»ΠΈ make clean # Clean build artifacts / ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹ сборки make install # Install to system / Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π² систСму sudo make install # Install with privileges / Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ с привилСгиями make uninstall # Uninstall from system / Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ· систСмы ### Parallel Builds / ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ сборка make -j$(nproc) # Use all CPU cores / Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС ядра CPU make -j4 # Use 4 cores / Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ 4 ядра make -j$(nproc) --load-average=$(nproc) # Limit load / ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ### Specific Targets / ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ†Π΅Π»ΠΈ make test # Run tests / Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ тСсты make check # Alternative test / ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ тСст make docs # Build documentation / Π‘ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ make dist # Create distribution tarball / Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ дистрибутивный Π°Ρ€Ρ…ΠΈΠ² ### Debugging / ΠžΡ‚Π»Π°Π΄ΠΊΠ° make VERBOSE=1 # Verbose output / ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ make -n # Dry run / ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ просмотр make -d # Debug makefile / ΠžΡ‚Π»Π°Π΄ΠΊΠ° Makefile ### Variables / ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ make CC=clang # Override compiler / ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ компилятор make CFLAGS="-O2 -march=native" # Custom CFLAGS / ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ CFLAGS make PREFIX=/usr/local # Custom prefix / ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ прСфикс make DESTDIR=/tmp/install install # Staged install / ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Π°Ρ установка --- # πŸ—οΈ CMake / БоврСмСнная сборка ### Basic Configuration / Базовая конфигурация cmake -S . -B build # Generate build tree / Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ сборки cmake -S . -B build -DCMAKE_BUILD_TYPE=Release # Release build / РСлизная сборка cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug # Debug build / ΠžΡ‚Π»Π°Π΄ΠΎΡ‡Π½Π°Ρ сборка cmake -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo # Release with debug info / Π Π΅Π»ΠΈΠ· с ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ cmake -S . -B build -DCMAKE_BUILD_TYPE=MinSizeRel # Minimal size / ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ### Build / Π‘Π±ΠΎΡ€ΠΊΠ° cmake --build build # Build project / Π‘ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ cmake --build build -j$(nproc) # Parallel build / ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ сборка cmake --build build --target all # Build all / Π‘ΠΎΠ±Ρ€Π°Ρ‚ΡŒ всё cmake --build build --target install # Build and install / Π‘ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ cmake --build build --clean-first # Clean before build / ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ сборкой ### Install / Установка cmake --install build # Install project / Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ cmake --install build --prefix /opt/myapp # Custom prefix / ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ прСфикс sudo cmake --install build # Install with sudo / Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ с sudo cmake --install build --component runtime # Install component / Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ### Configuration Options / ΠžΠΏΡ†ΠΈΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ cmake -S . -B build -DCMAKE_INSTALL_PREFIX=/usr/local # Install prefix / ΠŸΡ€Π΅Ρ„ΠΈΠΊΡ установки cmake -S . -B build -DCMAKE_CXX_COMPILER=clang++ # C++ compiler / C++ компилятор cmake -S . -B build -DCMAKE_C_COMPILER=clang # C compiler / C компилятор cmake -S . -B build -DBUILD_SHARED_LIBS=ON # Shared libraries / РаздСляСмыС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ cmake -S . -B build -DBUILD_TESTING=OFF # Disable tests / ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ тСсты ### Advanced / ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΠΎΠ΅ cmake -S . -B build -G Ninja # Use Ninja generator / Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Ninja cmake -S . -B build -G "Unix Makefiles" # Use Make generator / Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Make cmake -S . -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON # Generate compile_commands.json / Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ compile_commands.json cmake -S . -B build -DCMAKE_VERBOSE_MAKEFILE=ON # Verbose makefile / ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ ### Testing / ВСстированиС ctest --test-dir build # Run tests / Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ тСсты ctest --test-dir build --output-on-failure # Show failed tests / ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π°Π»Π΅Π½Π½Ρ‹Π΅ тСсты ctest --test-dir build -j$(nproc) # Parallel tests / ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ тСсты ctest --test-dir build -R regex # Run tests matching regex / Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ тСсты ΠΏΠΎ рСгуляркС ### Clean / ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° cmake --build build --target clean # Clean build / ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ сборку rm -rf build # Remove build directory / Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ сборки --- # ⚑ Meson / Быстрая сборка ### Setup / Настройка meson setup build # Setup build directory / ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ сборки meson setup build --buildtype=release # Release build / РСлизная сборка meson setup build --buildtype=debug # Debug build / ΠžΡ‚Π»Π°Π΄ΠΎΡ‡Π½Π°Ρ сборка meson setup build --buildtype=debugoptimized # Optimized debug / ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°Ρ ΠΎΡ‚Π»Π°Π΄ΠΊΠ° meson setup build --prefix=/usr/local # Custom prefix / ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ прСфикс ### Compile / ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ meson compile -C build # Compile project / Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ meson compile -C build -j$(nproc) # Parallel compile / ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ компиляция ninja -C build # Alternative with ninja / ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° с ninja ### Install / Установка meson install -C build # Install project / Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ meson install -C build --destdir /tmp/staging # Staged install / ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Π°Ρ установка sudo meson install -C build # Install with sudo / Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ с sudo ### Test / ВСстированиС meson test -C build # Run tests / Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ тСсты meson test -C build --verbose # Verbose tests / ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ тСсты meson test -C build -j$(nproc) # Parallel tests / ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ тСсты ### Configuration / ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ meson configure build # Show configuration / ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ meson configure build -Dprefix=/opt/myapp # Change option / Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ meson configure build -Dbuildtype=release # Change build type / Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ сборки ### Other Commands / Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ meson dist -C build # Create distribution / Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ дистрибутив meson introspect build --targets # List targets / Бписок Ρ†Π΅Π»Π΅ΠΉ meson wrap install packagename # Install dependency / Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ --- # πŸ₯· Ninja / Backend сборка ### Basic Usage / Π‘Π°Π·ΠΎΠ²ΠΎΠ΅ использованиС ninja # Build default target / Π‘ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Ρ†Π΅Π»ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ninja -C build # Build in directory / Π‘ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ninja all # Build all targets / Π‘ΠΎΠ±Ρ€Π°Ρ‚ΡŒ всС Ρ†Π΅Π»ΠΈ ninja clean # Clean build / ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ сборку ### Parallel / ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒ ninja -j$(nproc) # Use all cores / Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС ядра ninja -j8 # Use 8 cores / Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ 8 ядСр ### Specific Targets / ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ†Π΅Π»ΠΈ ninja test # Run tests / Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ тСсты ninja install # Install / Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ninja # Build specific target / Π‘ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Ρ†Π΅Π»ΡŒ ### Info / Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ninja -t targets # List targets / Бписок Ρ†Π΅Π»Π΅ΠΉ ninja -t graph | dot -Tpng -o graph.png # Generate dependency graph / Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€Π°Ρ„ зависимостСй ninja -t commands # Show all commands / ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ --- # βš™οΈ Configure Options / ΠžΠΏΡ†ΠΈΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ### Autotools (./configure) / Autotools ./configure # Basic configure / Базовая конфигурация ./configure --prefix=/usr/local # Install prefix / ΠŸΡ€Π΅Ρ„ΠΈΠΊΡ установки ./configure --help # Show options / ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΠΈ ./configure --enable-feature # Enable feature / Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ./configure --disable-feature # Disable feature / ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ./configure --with-package # Include package / Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ ./configure --without-package # Exclude package / Π˜ΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ ./configure CFLAGS="-O3" CXXFLAGS="-O3" # Custom flags / ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ„Π»Π°Π³ΠΈ ### Common Pattern / Распространённый шаблон ./configure && make -j$(nproc) && sudo make install # Configure, build, install / ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ, сборка, установка ./configure --prefix=$HOME/.local && make -j$(nproc) && make install # User install / Установка ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ --- # πŸ› Troubleshooting / УстранСниС Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ ### Build Errors / Ошибки сборки make clean && make -j1 # Serial build for debugging / ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ сборка для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ cmake --build build --verbose # Verbose build / ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π°Ρ сборка VERBOSE=1 make # Verbose make / ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ make meson compile -C build --verbose # Verbose meson / ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ meson ### Missing Dependencies / ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ зависимости apt search # Search package / Поиск ΠΏΠ°ΠΊΠ΅Ρ‚Π° apt-cache search -dev # Search dev package / Поиск dev ΠΏΠ°ΠΊΠ΅Ρ‚Π° dnf search # RHEL search / Поиск RHEL pkg-config --list-all # List installed packages / Бписок установлСнных ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² pkg-config --modversion # Check version / ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ ### CMake Cache Issues / ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ кэша CMake rm -rf build && cmake -S . -B build # Fresh build / БвСТая сборка cmake -S . -B build -U '*' # Clear cache / ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ кэш ccmake build # Interactive config / Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Π°Ρ конфигурация ### Check Build System / ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° систСмы сборки cmake --version # CMake version / ВСрсия CMake meson --version # Meson version / ВСрсия Meson ninja --version # Ninja version / ВСрсия Ninja make --version # Make version / ВСрсия Make --- # 🌟 Real-World Examples / ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ· ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ### Build from Source (Autotools) / Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈΠ· исходников (Autotools) ```bash wget https://example.com/project-1.0.tar.gz tar -xzf project-1.0.tar.gz cd project-1.0 ./configure --prefix=/usr/local make -j$(nproc) sudo make install sudo ldconfig # Update library cache / ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ кэш Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ``` ### Build from Source (CMake) / Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈΠ· исходников (CMake) ```bash git clone https://github.com/project/repo.git cd repo cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local cmake --build build -j$(nproc) sudo cmake --install build ``` ### Build from Source (Meson) / Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈΠ· исходников (Meson) ```bash git clone https://github.com/project/repo.git cd repo meson setup build --buildtype=release --prefix=/usr/local meson compile -C build -j$(nproc) sudo meson install -C build ``` ### User-Local Install / Установка ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ```bash # CMake user install / CMake установка ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ cmake -S . -B build -DCMAKE_INSTALL_PREFIX=$HOME/.local cmake --build build -j$(nproc) cmake --install build # Add to PATH / Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² PATH echo 'export PATH=$HOME/.local/bin:$PATH' >> ~/.bashrc source ~/.bashrc ``` ### Cross-Compilation / ΠšΡ€ΠΎΡΡ-компиляция ```bash # CMake cross-compile / CMake кросс-компиляция cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake # Meson cross-compile / Meson кросс-компиляция meson setup build --cross-file cross.txt ``` ### Static Build / БтатичСская сборка ```bash # CMake static / CMake статичСская cmake -S . -B build -DBUILD_SHARED_LIBS=OFF -DCMAKE_EXE_LINKER_FLAGS="-static" # Autotools static / Autotools статичСская ./configure --enable-static --disable-shared LDFLAGS="-static" ``` ### Optimized Build / ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°Ρ сборка ```bash # CMake with LTO / CMake с LTO cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON # Autotools with native / Autotools с Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ./configure CFLAGS="-O3 -march=native -flto" CXXFLAGS="-O3 -march=native -flto" ``` ### Debug Build / ΠžΡ‚Π»Π°Π΄ΠΎΡ‡Π½Π°Ρ сборка ```bash # CMake debug / CMake ΠΎΡ‚Π»Π°Π΄ΠΊΠ° cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON cmake --build build -j$(nproc) # Use with gdb / Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с gdb gdb ./build/myapp ``` ### Package for Distribution / ΠŸΠ°ΠΊΠ΅Ρ‚ для дистрибуции ```bash # CMake CPack / CMake CPack cmake -S . -B build cmake --build build cpack --config build/CPackConfig.cmake # Create package / Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ # Meson dist / Meson дистрибутив meson setup build meson dist -C build # Create tarball / Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΠ² ``` ### Container Build / Π‘Π±ΠΎΡ€ΠΊΠ° Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ ```bash # Build in Docker / Π‘Π±ΠΎΡ€ΠΊΠ° Π² Docker docker run --rm -v $(pwd):/src -w /src ubuntu:22.04 bash -c "apt update && apt install -y build-essential cmake && cmake -S . -B build && cmake --build build" ``` # πŸ’‘ Best Practices / Π›ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ # Always use -j$(nproc) for parallel builds / ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ -j$(nproc) для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ сборки # Prefer out-of-source builds / ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ сборку Π²Π½Π΅ исходников # Use Release builds for production / Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Release сборки для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π° # Check dependencies before building / ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ зависимости ΠΏΠ΅Ρ€Π΅Π΄ сборкой # Clean build directory on errors / ΠžΡ‡ΠΈΡ‰Π°ΠΉΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ сборки ΠΏΡ€ΠΈ ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… # Use DESTDIR for staged installs / Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ DESTDIR для ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… установок # πŸ”§ Build Tools Comparison / Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ инструмСнтов сборки # Make/Autotools: Traditional, widespread / Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅, распространённыС # CMake: Modern, cross-platform / Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ, кроссплатформСнный # Meson: Fast, simple syntax / Быстрый, простой синтаксис # Ninja: Fast backend for CMake/Meson / Быстрый backend для CMake/Meson # πŸ“‹ Common Build Types / РаспространённыС Ρ‚ΠΈΠΏΡ‹ сборки # Debug: No optimization, debug symbols / Π‘Π΅Π· ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Π΅ символы # Release: Optimized, no debug symbols / ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°Ρ, Π±Π΅Π· ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ… символов # RelWithDebInfo: Optimized with debug / ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°Ρ с ΠΎΡ‚Π»Π°Π΄ΠΊΠΎΠΉ # MinSizeRel: Optimized for size / ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°Ρ для Ρ€Π°Π·ΠΌΠ΅Ρ€Π°