Physics.Math.Code
150K subscribers
5.24K photos
2.25K videos
5.82K files
4.6K links
VK: vk.com/physics_math
Чат инженеров: @math_code
Учебные фильмы: @maths_lib
Репетитор IT mentor: @mentor_it
YouTube: youtube.com/c/PhysicsMathCode

Обратная связь: @physicist_i
Download Telegram
Media is too big
VIEW IN TELEGRAM
🖥 Практика языка C (МФТИ, 2023-2024). Допсеминар: системы сборки (make, cmake).

00:00 Зависимости и хедера
08:22 Build.sh
11:48 Makefiles и декларативная модель
19:51 Ленивые и переменные
30:52 Автоматические переменные
36:15 Первая версия makefile
41:33 Функции и wildcards
47:40 Вторая версия makefile и зависимости от хедеров
56:36 Третья итерация: почти идеальный makefile
01:06:26 Знакомство с cmake
01:19:35 Бонус. Немного больше про cmake.
01:30:40 Окончательные уроки.
автор: tilir

🔨 Поговорим о двух столпах сборки C-проектов: Make и CMake. Их часто противопоставляют, но на самом деле они решают разные задачи в цепочке превращения кода в бинарник.

▪️Make (или make и Makefile) — Это менеджер задач, который исполняет команды, описанные в Makefile. Его логика проста: цели, зависимости и команды.
app: main.o utils.o
gcc main.o utils.o -o app

main.o: main.c
gcc -c main.c

utils.o: utils.c
gcc -c utils.c

clean:
rm -f *.o app

Запускаем make — и он по цепочке зависимостей собирает всё, что изменилось.
Плюс: Полный контроль, переносимость (если использовать общие команды).
Минус: Писать Makefile для большого кроссплатформенного проекта — боль и рутина.

▪️ CMake (и CMakeLists.txt) — это мета-сборщик или система генерации скриптов сборки. CMake не компилирует сам, а генерирует нативные файлы для других систем: Makefile для Linux/macOS, .sln для Visual Studio, проект для Xcode и т.д.
cmake_minimum_required(VERSION 3.10)
project(MyApp)
add_executable(app main.c utils.c)

Запускаем так:
mkdir build && cd build
cmake ..
make

Плюс: Кроссплатформенность, управление зависимостями (find_package), относительная простота для сложных проектов.
Минус: Свой язык и абстракция, которая иногда «утекает».

▫️ Make — низкоуровневый инструмент, который говорит компилятору как и когда делать свою работу.
▫️ CMake — высокоуровневый инструмент, который говорит разным системам сборки (включая Make), как они должны работать с вашим проектом.
▫️ CMake использует Make? Да! Чаще всего CMake генерирует Makefile, а затем вы вызываете make, который уже управляет компилятором.
▫️ Для маленьких, учебных или специфичных проектов — Makefile может быть быстрее и понятнее. Для средних/крупных или кроссплатформенных — CMake почти стандарт индустрии.

А что вы предпочитаете в своих проектах и почему? Может, у вас есть любимый лайфхак для Makefile или неочевидный трюк с CMake? Или вы вообще используете что-то третье (Meson, Bazel, простой скрипт)? Делитесь опытом!
#cpp #cmake #программирование #cplusplus #it #C

💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
65👍34🔥15🤩4👨‍💻4🤔2🙈2🫡2❤‍🔥1