Использование `make` для компиляции программ на языке C=news.ycombinator.com=

Использование `make` для компиляции программ на языке C ( jvns.ca )

kazinator 23 минуты назад | [–]
CPPFLAGS и CXXFLAGS отличаются. CPPFLAGS предназначены для опций препроцессора C, независимо от того, для какого языка он используется. CXXFLAGS предназначены для C++. XX — это ++, повернутые на 45 градусов.

Не обманывайтесь соглашением, используемым в некоторых местах суффикса .cpp для файлов C++; CPPFLAGS имеют отношение к программе “cpp”, а не к суффиксу .cpp.

LDLIBS — родственная переменная LDFLAGS. Обе эти переменные содержат опции для командной строки компоновщика, разделенные на две группы: LDFLAGS — это ранние опции, которые идут перед объектными файлами. LDLIBS — это опции -l, которые задают библиотеки, например -lssl -ldl -lcrypto … они идут после объектных файлов.

Если вы пишете Makefile со своими собственными рецептами для компоновки, убедитесь, что вы интерполируете LDFLAGS и LDLIBS в нужных местах.

jiehong 3 минуты назад | | [–]
Хотелось бы, чтобы больше проектов включали dockerfile, в котором установлены компилятор и все зависимости для запуска правильной команды make как «docker build».

Таким образом, вы получаете работающий пример сборки, и если вам повезет и базовый образ для вашей архитектуры существует, он также скомпилирует двоичный файл для вашей системы (полагаю, при условии статической компоновки).

ashishb 15 минут назад | [–]
Мне нравится Makefile. Это самая простая система сборки.

В моих проектах, независимо от языка — Go, Rust, Python, TypeScript или даже Android, есть стандартные команды make, если они применимы, они всегда работают.

– make format – make lint – make build – make docker_build – make docker_run Один раз можно перейти из одной системы сборки, например, pipenv в poeteza и затем в uv, но высокоуровневые команды `make format` не изменятся.


Рассмотрите возможность подачи заявки на набор в YC на осень 2025 года! Заявки принимаются до 4 августа

Source: news.ycombinator.com

Leave a Reply

Your email address will not be published. Required fields are marked *