2009-05-21 13 views
2

Ich bin in einem großen Problem .. Ich habe meine c-Dateien mit Linux-Datei unter Linux OS kompiliert.make --- Linux und Windows-Formate

Ich möchte die gleichen Dateien in Windows mit der gleichen make-Datei über die Eingabeaufforderung kompilieren. Dafür habe ich nmake Dienstprogramm und Cygwin Dienstprogramm auch.

Ich habe das erfolgreich mit einfachen Programmen mit einfacher Make-Datei durchgeführt ..

Aber es ist nicht möglich, zu kompilieren, als ich die komplexen C-Dateien mit komplexer Make-Datei.

Ich habe das '/' in Linux Make-Datei auf '\' in Windows geändert? Irgendwelche Änderungen?

Ich möchte wissen 'Gibt es spezielle Make-Dateiformate in Windows?'

auch der Unterschied zwischen ihnen ..

Ich bin wirklich in der Notwendigkeit, dass ...

+2

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

+1

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

Antwort

5

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.

0

nmake Makefiles in Ordnung lesen soll, sind die Unterschiede im allgemeinen zwischen Versionen von make statt oss.

Die große Frage ist, was Ihre Zielplattform eigentlich ist, versuchen Sie, diesen Code in Windows nativ arbeiten zu lassen, oder möchten Sie ihn unter Cygwin ausführen?

+0

Danke..ich benutze NMAKE.EXE 1.50 ... Ich denke das ist das Problem. Ich habe auch den Pfad festgelegt PATH = C: \ cygwin \ bin;% PATH% in der Eingabeaufforderung. Ich möchte wissen, ob es irgendwelche Format/Syntax Unterschiede zwischen ihnen gibt? –

+0

Ich weiß nicht, nmake gut genug, so überprüfen Sie mit einem der Jungs unten. Ich schlage vor, dass Sie die akzeptierte Antwort von diesem entfernen und sie auf einen der folgenden anwenden, wenn das möglich ist. Sie verdienen das Akzeptieren mehr als ich. – Lazarus

0

Verwenden Sie Gnumake auf beiden Plattformen. Ich mache. Ich habe Visual C seit Jahren nicht mehr berührt.

1

Sie sollten CMake für Cross-Plattform-Marke berücksichtigen, aber Ihr echtes Problem ist, dass Sie das '/' nicht zu '\' ändern müssen. Wenn Sie unter cygwin oder msys (empfohlen) laufen, sollte dies für Sie erledigt werden.

+1

Ganz zu schweigen davon, dass Windows Schrägstriche sowohl als Verzeichnisseparatoren als auch als Rückwärtsstriche interpretiert (wenn sich nicht ein Programm mit schlechtem Verhalten in seinem eigenen Pfadparsing befindet) funktioniert "command C:/some/thing" genauso wie " Befehl C: \ some \ ding ". – ephemient

1

NMake ist ein Windows-Tool und analysiert nur Pfade im Windows-Stil, d. H. Pfade mit Laufwerksbuchstaben und Backslashes. Daher sollten Sie GNU Make mit cygwin installieren.

0

nmake hat sein eigenes Format und nicht Windows selbst, also ist das Makefile-Format verwandt mit make tool statt os. Für einfache Dinge ist das Format ähnlich wie für g (nu) make und nmake, wie es die Leute vorhin vorgeschlagen haben, nur gmake zu verwenden.

+0

danke ... beide haben das gleiche Format? –

+0

nur für die grundlegenden Dinge –