2009-06-14 9 views
3

Ich schreibe eine Anwendung, die ich Binärdateien für Mac, Windows und Linux freigeben möchte. Ich habe Code, der unter Mac und Linux kompiliert, aber unter Windows nicht.Wie kann ich mein Projekt so konfigurieren, dass plattformunabhängiger Code generiert wird?

Dies liegt an Windows fehlt eine strcasecmp. Ich habe ein bisschen darüber gelesen, wie ich eine Art Header erstellen kann, um meinen Code zu umhüllen, aber ich verstehe dieses Konzept nicht wirklich gut. Ich habe den Code auf meinem Mac nur mit vim und make bearbeitet, aber jetzt versuche ich, alles auf Visual Studio umzustellen.

Gibt es eine Möglichkeit, mein Projekt so einzurichten, dass es Windows-Wrapper-Header enthält, wenn ich auf Windows baue, aber sie weglasse, wenn ich auf meinem Mac oder meiner Linux-Box baue?

Dieses Problem gibt mir wirklich Kopfschmerzen und ich würde mich über Vorschläge freuen!

Antwort

7

Sie könnten

#ifdef WIN32 
#include <windows_specific_header.h> 
#else 
#include <other_header.h> 

tun Es gibt auch eine MS Visual Studio-spezifische Makro: _MSC_VER, so

#ifdef _MSC_VER 

würde auch hier arbeiten.

Es gibt auch WINVER definieren in windows.h.

+0

Ist WIN32 ein Compiler-definiertes Symbol oder muss ich etwas definieren? – samoz

+0

Dies ist ein vom Compiler definiertes Symbol. – PaV

+1

Sie müssen ein wenig vorsichtig mit WIN32 sein, da es manchmal in Compilern wahr ist, die Sie denken, dass sie nicht Windows-y sind. IIRC ist zum Beispiel wahr, wenn Symbian-Code für den Emulator kompiliert wird, obwohl keine Windows-Header oder Bibliotheken verfügbar sind. Sie haben keinen Einfluss darauf, ob Ihre Plattformen nur win/linux/mac sind, aber es könnte wichtig sein, dass der Code extrem portabel ist. –

1

configure mein Projekt plattformunabhängigen Code

, die ein bisschen aus einer ungeraden Phase ist, zu erzeugen, so dass ich bin mir nicht sicher, dass ich die richtige Frage bin aswering, aber hier geht:

Sie müssen plattformunabhängigen Code schreiben.

Wählen Sie eine der folgenden Optionen:

  • Schreibe eine plattformübergreifende Rahmen (dh QT)
  • Nur Bibliotheksfunktionen verwenden, die auf alle Ihre Ziele verfügbar sind

oder

  • bieten Wrapper zum Auffüllen von Lücken in der Bibliothek für (oder mehr) Ziele
+0

Nun, meistens brauche ich einige String-Funktionen, die Windows nicht bietet. Sie stellen sie vielmehr unter einem anderen Namen bereit, sodass ein Windows-Compiler nicht die gleichen Funktionen wie Mac oder Linux findet. – samoz

1

Boost-Bibliotheken sind plattformübergreifend konzipiert. Insbesondere wenn Sie Strings bearbeiten müssen, werden Sie wahrscheinlich finden, was Sie brauchen. Und es wird plattformübergreifend sein, ohne dass Sie selbst damit umgehen müssen. Siehe there, um einen Einblick zu bekommen, was verfügbar ist.

0

vielleicht können Sie in Betracht ziehen, Ihren Code mit MINGW32 auf Windows zu kompilieren.

Verwandte Themen