К сожалению, nmake вдохновлялся make только вяло, и они не поняли многих важных вещей. Безусловно, проще всего начать с того, что на обеих платформах используется один и тот же вариант make.
В linux Gnu make является лучшим вариантом по умолчанию.
В Windows есть несколько источников для Gnu make, с некоторыми изюминками на выбор. Лично я в основном использую встроенную сборку win32 Gnu make из проекта GnuWin32 . Возможно, вы захотите покопаться в остальных пакетах проекта, потому что некоторые из других также будут полезны.
Альтернативные источники Cygwin и MinGW32 / MSYS .
Cygwin - надежная попытка создать среду совместимости * nix поверх ядра Windows. Он состоит из DLL, которая экспортирует огромный процент системных вызовов * nix (особенно POSIX), реализованных через Windows API. Эта DLL также имеет свое собственное представление о монтировании дисков и предпочитает имена путей в стиле * nix. Сама DLL является лицензией GPL (хотя лицензия на коммерческое использование предоставляется за отдельную плату), и программы, встроенные в среду Cygwin, требуют ее по умолчанию, что может быть важным фактором. Другим фактором является то, что Cygwin не дружелюбен к обычным пользователям Windows, поэтому разработчикам на его основе обычно трудно иметь дело с пользователями, не являющимися Unix. Однако для кроссплатформенного разработчика Cygwin может быть действительно полезным, поскольку он предоставляет вам все обычные подозрительные служебные программы, необходимые для вашего Makefile, и включает в себя собственный GCC для Windows, предназначенный для MinGW32, а также GCC, ориентированный на среду Cygwin.
MinGW32 - это проект переноса, который отлично справился с переносом компиляторов GCC для работы в качестве собственных исполняемых файлов Windows. При использовании вместе с заголовочными файлами, которые они предоставляют, можно использовать почти весь API-интерфейс Windows через DLL времени выполнения C, которая поставляется с современными установками Windows.
MSYS - это легкая ветвь Cygwin, которая содержит минимальный набор утилит (начиная с оболочки * nix), которые обычно предполагаются существующими в типичном * nix Makefile. В отличие от Cygwin, MSYS настроен так, что целью по умолчанию является собственный Windows API.
Здесь я намекаю на что-то, и, вероятно, должен просто заявить, что проблемы с совместимостью не заканчиваются на диалекте использования.
Сам язык Makefile сильно зависит от доступной командной оболочки, и в большинстве серьезных файлов Makefile проекта используются многие из * nix основных утилит, таких как cp и rm.
Я бы настоятельно рекомендовал начать с сборки сборки GnuWin32, а также установить MinGW32 и MSYS. Тогда сравнительно легко написать Makefile, который работает как под MSYS, так и под linux, и требует лишь небольшого количества логики для конкретной платформы.