2011-05-24 21 views
11

Taşınabilir bir C++ uygulaması yazıyorum. Çalıştığı işletim sistemine bağlı olarak farklı başlıkları nasıl ekleyebilirim. Bunu C++ 'da yapmanın bir yolu var mı yoksa yapı sistemini kullanmak zorunda mıyım? Önişlemci ileİşletim sistemime göre farklı başlıkları nasıl ekleyebilirim?

+0

İşte oldu. Bana hatırlattığın için teşekkürler. – roshanvid

+0

Rica ederim. Ama * lütfen * bunu yapı sisteminde yapın, yazılımınızı daha iyi korunabilir hale getirecektir. Modüller platformdan bağımsız bir şekilde yazılmazsa (genellikle Boost veya Qt gibi kütüphanelerle olabilirler), OS özümleri üzerinde kendi soyutlamalarınızı tasarlayabilir ve bunları birkaç kez uygulayabilirler. –

+0

Tüm iyi cevaplar. Maalesef, açık olduğunu söylüyordum, ancak genellikle platformlar olan üstbilgileri ve kitaplıkları tercih etmenin iyi bir fikir olduğunu aklımda tutarım. [C++ Standart Kütüphanesi] (http://en.wikipedia.org/wiki/C%2B%2B_standard_library) ihtiyacınız olan her şeye sahip olduğunda, neden bir alternatif seçeceğinizi kendinize sorun. –

cevap

10

:

Biz Linux (Red Hat Enterprise 5), Sun (Solaris) ve Windows üzerinde geliştirmek
#ifdef _SUNOS 
//code 
#elseif _LINUX 
//code 
#elseif _HPUX 
//code 
#elseif _WIN32 
//code 
#else 
#error OS not supported 
#endif 
+0

İşte bir [önceden tanımlanmış makrolar listesi] (http://predef.sourceforge.net/preos.html). – roshanvid

+0

@ c0smikdebris: teşekkür ederim :) – BlackBear

+0

_WIN32'nin hem 32 bit hem de 64 bit Windows'ta tanımlandığını unutmayın. – user763305

4

.

#ifndef MSWINDOWS 
#include <unistd.h> 
#else 
#include <winbase.h> 
#endif 
//More includes here 
8

Ben önişlemci direktifleri ve çapraz platform inşa sistemi gibi CMake kullanırsınız: Sistemimiz böyle bir şey kullanmaktır. Sen yapabilirdi: -DLINUX:

#ifdef LINUX 
#include <unistd.h> 
#elif defined(WINDOWS) 
#include <algorithm.h> 
# elif Defined(MAC_OSX) 
//... etc. 
#else 
#error No operating system defined 
#endif 

Sonra gibi bir yapı için gelen önişlemci bayrağı ekleyin.

+0

Bence bu iyi bir fikir. Son zamanlarda derleyicilerin kullandığı tanımları kullanarak bunu yapmaya çalıştı ama ben vazgeçtim, çok fazla varyasyon var ve değil. Yapı sistemiyle belirlenen kendi tanımımı kullanmanın daha kolay olduğunu keşfettim. – Skurmedel

İlgili konular