Решите, какая платформа будет использоваться по умолчанию - скажем, LINUX.
LIBS_PATH = -L/usr/norton/lib
INC_PATH = -I/usr/norton/include
LIBS = -lntr
PLATFORM = -DLINUX
CXX = g++
app: *.cpp *.h Makefile
${CXX} ${CFLAGS} ${PLATFORM} ${INC_PATH} *.cpp -o $@ ${LIBS_PATH} ${LIBS}
Вместо скоб можно использовать круглые скобки.Это использует макрос для компилятора C ++, позволяет вам добавлять другие флаги через CFLAGS (хотя это также обычно устанавливается 'make') и добавляет платформу, путь включения, путь к библиотеке и фактическую библиотеку в строку компиляции..
Обратите внимание, что ваше правило обеспечивает полную перекомпиляцию всего, каждый раз, когда что-то меняется.Это «безопасно», но не обязательно эффективно.Обратите внимание, что подстановочные знаки тоже опасны - больше для источника, чем для заголовков.Вы можете включить эту резервную копию файла в сборку (old-reader.cpp - вы действительно хотели, чтобы туда был reader.cpp).Более условно, вы перечисляете объектные файлы, необходимые для программы, чтобы каждый объектный файл можно было индивидуально перестроить при необходимости, а результаты связать вместе.Если вы правильно установили свои зависимости (умеренно большое «если»), то проблем нет.Если вы ошиблись, вы можете получить несовместимые программы.
Однако, если разница между 5-секундной и 5-минутной перекомпиляциями, вам, вероятно, следует выполнить 5-минутную перекомпиляцию (как показано) иответьте на другой вопрос SO во время ожидания.
Чтобы скомпилировать в Linux (64-разрядная версия):
make CFLAGS="-m64"
Чтобы скомпилировать в Linux (32-разрядная версия):
make CFLAGS="-m32"
Для компиляции в Windows 64:
make PLATFORM=-DWIN64
Для компиляции в Windows 32:
make PLATFORM=-DWIN32
И т.д.