Leider wurde nmake nur schwach von make inspiriert, und sie haben nicht viele wichtige Dinge richtig gemacht. Bei weitem die einfachste Sache zu tun ist, mit dem gleichen Geschmack der Marke auf beiden Plattformen zu beginnen.
Unter Linux ist Gnu make die Standardeinstellung und die beste Option.
Unter Windows gibt es mehrere Quellen für Gnu-Marken, mit einigen Macken zu wählen. Persönlich verwende ich meistens native win32 build of Gnu make from the GnuWin32 project. Vielleicht möchten Sie bei den restlichen Paketen des Projekts herumstochern, weil einige der anderen auch nützlich sein werden.
Alternative Quellen sind Cygwin und MinGW32/MSYS.
Cygwin ist ein glaubwürdiger Versuch, eine * nix-Kompatibilitätsumgebung zusätzlich zum Windows-Kernel bereitzustellen. Es besteht aus einer DLL, die einen großen Prozentsatz von * nix (insbesondere POSIX) Systemaufrufen exportiert, die über die Windows API implementiert werden. Diese DLL hat auch eine eigene Idee über Festplatten-Mounts und bevorzugt * nix-ähnliche Pfadnamen. Die DLL selbst ist eine lizenzierte GPL (obwohl eine kommerzielle Lizenz für eine Gebühr verfügbar ist), und Programme, die in der Cygwin-Umgebung erstellt werden, erfordern dies standardmäßig, so dass dies ein wichtiger Faktor sein kann.Ein weiterer Faktor ist, dass Cygwin nicht mit normalen Windows-Benutzern vertraut ist, daher sind Entwicklungsprojekte, die darauf basieren, normalerweise für Nicht-Unix-Benutzer schwierig zu handhaben. Für einen plattformübergreifenden Entwickler kann Cygwin jedoch sehr nützlich sein, da er alle üblichen verdächtigen Hilfsprogramme, die von Ihrem Makefile benötigt werden, enthält und den MinGW32-nativen Windows-Ziel-GCC sowie einen GCC für die Cygwin-Umgebung enthält.
MinGW32 ist ein Portierungsprojekt, das die Portierung der GCC-Compiler als native ausführbare Windows-Dateien sehr gut durchgeführt hat. Wenn sie zusammen mit den von ihnen gelieferten Header-Dateien verwendet werden, ist es möglich, fast die gesamte Windows-API über eine C-Laufzeit-DLL zu verwenden, die mit modernen Windows-Installationen ausgeliefert wird.
MSYS ist eine leichte Gabel von Cygwin, die eine minimale Menge von Dienstprogrammen enthält (beginnend mit einer * nix-Shell), von denen normalerweise angenommen wird, dass sie durch ein typisches * nix-Makefile existieren. Im Gegensatz zu Cygwin ist MSYS so konfiguriert, dass das Standardziel die native Windows-API ist.
Was ich hier andeuten möchte, und wahrscheinlich sollte nur flach sagen, ist, dass Ihre Kompatibilitätsprobleme nicht mit dem Dialekt von machen Sie verwenden enden.
Die Makefile-Sprache selbst hängt stark von der verfügbaren Befehlsshell ab, und die meisten ernsthaften Projekt-Makefiles enden mit vielen * nix-Kerndienstprogrammen wie cp und rm.
Ich würde dringend empfehlen, mit dem GnuWin32 Build von Make zu starten, und auch MinGW32 und MSYS zu installieren. Es ist dann relativ einfach, ein Makefile zu schreiben, das sowohl unter MSYS als auch unter Linux arbeitet und nur eine kleine Menge plattformspezifischer Logik benötigt.
Sind Sie sicher, dass das Problem mit dem Format von Makefile ist? Es kann vorkommen, dass Ihr Makefile auf einige Linux-Bibliotheken verweist, die unter Windows nicht vorhanden sind oder versucht, etwas auszuführen, z. Für die Verbindung mit MySQL führt man typischerweise 'mysql_config --libs' aus, um eine Liste von MySQL-Bibliotheken zu erhalten. – qrdl
NMake ist mit allen * nix-Versionen von make inkompatibler als die verschiedenen * nix-Versionen. Es ist zwar möglich, Dateien zu schreiben, die sowohl mit NMake als auch mit make funktionieren, aber es lohnt sich nicht, da mehrere echte Marken für Windows verfügbar sind. Sobald die Wahl der Marke getroffen ist, erscheint das Problem der restlichen Befehle. – RBerteig