Возможно, не совсем понимая что искать, не могу найти действующего примера. Проект на C++, разбит на подпапки(src:Engine{Component, Utils}, Process{Objects,...,etc}). Как описать MakeFile, чтобы он собирал исходники по папкам? Из всего, что наскрёб, увидел вариацию "в каждой папке по MakeFile", что немного дезориентировало. Если это тот самый способ, есть ли необходимость повторения в каждом указания используемых библиотек(Boost'a, к примеру), флагов и т.д. ? Заранее спасибо.
увидел вариацию "в каждой папке по MakeFile"
наличие отдельного файла с инструкциями для программы gnu/make в каждом сборочном каталоге не всегда обязательно, хотя, наверно, удобно.
пусть имеется такая структура файлов/каталогов:
$ tree
.
├── GNUmakefile
├── program.cpp
└── somepart
└── somecode.cpp
1 directory, 3 files
минимально необходимое содержимое файла GNUmakefile для данного случая — всего одна строка, декларирующая, что «для получения program
нужны program.o
и somepart/somecode.o
»:
$ cat GNUmakefile
program: program.o somepart/somecode.o
проверяем, какие команды будет выполнять make (опция -n
, она же --dry-run
, только выводит последовательность команд, не выполняя их):
$ make -n
g++ -c -o program.o program.cpp
g++ -c -o somepart/somecode.o somepart/somecode.cpp
cc program.o somepart/somecode.o -o program
чуть подробнее о том, откуда программа make всё это взяла — в другом моём ответе.
надо добавить что-нибудь в (например) опции для c++? используйте подходящую переменную:
$ cat GNUmakefile
CXXFLAGS += -I/путь/к/boost
program: program.o somepart/somecode.o
проверка:
$ make -n
g++ -I/путь/к/boost -c -o program.o program.cpp
g++ -I/путь/к/boost -c -o somepart/somecode.o somepart/somecode.cpp
cc program.o somepart/somecode.o -o program
если всё-таки подребуется отдельный файл, то вызывается он обычно рецептом вида:
$(MAKE) -C подкаталог
чтобы вызываемому экземпляру программы gnu/make «попала» какая-нибудь переменная, надо её явно экспортировать с помощью директивы export
в «основном» файле:
export CXXFLAGS += ...
Виртуальный выделенный сервер (VDS) становится отличным выбором
в с++ машина видит char как целочисленный тип и можно просто брать и делать так:
Как правильно захватывать глобальные переменные в лямбде? Хочу использовать следующим образом, но выдаются предупрежденияКак их подавить?
Можно ли как-то включить в maincpp все возможные заголовочные файлы языка, чтобы каждый раз не думать, что подключать? Может есть специальный...