2009-07-13 13 views
6

Ben iPhone, Windows, Linux, Mac ve Symbian S60 dahil epeyce farklı platformlarda, üzerine inşa edebilmek için gereken C++ küçük bir kütüphane yazıyorum. Kodun çoğunu platform-agnostik olacak şekilde yazdım, ancak platform bazında yazılması gereken bazı bölümler var. Platformu C Preprocessor Tanımlar

Şu anda geçerli platformda bağlı olarak farklı bir başlık dahil ederek bunu gerçekleştirmek ama tanımlamalar tüm platformlar için tanımlanan hangi önişlemci emin değilim çünkü bu ortaya koymasıyla sorun yaşıyorum. Pencereler için genellikle WIN32 veya _WIN32'yi görmeye güvenebilirim. Linux için _UNIX_'ı görmeye güvenebilirim ancak diğer platformlar ya da 64-bit varyantları hakkında daha az eminim. Herkesin platformlarda bulunan farklı tanımların bir listesi var mı yoksa bir config dosyasına mı yoksa gcc parametresine başvurmalı mıyım? belirli bir C ya da C++ uygulamaları insafına olacak, böylece

cevap

9

benim imleri this sourceforge pre-compiler sayfa var.

+0

Google'ın her zaman eski sürüme işaret etmesine rağmen, yeni wiki-sürümü sürümüne işaret etmek için bağlantıyı düzenledim. . – rubenvb

+0

Tamam, teşekkürler. –

0

Cı, ne de C++ standartlar ne, bu semboller tanımlar. Yaygın olarak kullanılan sembollerin bir listesi sahip olmak için yararlı bir şey olurdu, ama maalesef bir tane bile yok. Ben platformun evrensel listesi vardır sanmıyorum

0

gördüğüm her çapraz platform kütüphanesi bir reklam-hoc config.h bu şeylerle dolu olduğu gerçeği bakılırsa tanımlar. Ama burada libpng

0

tanımları tamamen sizin derleyici satıcı kadar olacak kullandığı biri

zlib vb libpng gibi oldukça taşınabilir kütüphaneler tarafından kullanılan olanlar bakarak düşünebilirsiniz. Tüm platformlarınızda aynı derleyiciyi (diyelim, gcc) kullanıyorsanız, biraz daha kolay bir zamana sahip olacaksınız.

Ayrıca yerine .h dosyalarının en platformu bağımlı değildir, öyle ki projenizi düzenlemeye denemek isteyebilirsiniz. Uygulamanızı (cpp dosyaları) ayrı dosyalara ayırın; Özgün olmayan şeyler için bir tane ve her bir platform için bir tane. Platforma özgü olanlar, yalnızca bu platform için anlamlı olan 'özel' başlıkları içerebilir. Bunun gibi bir şey elde etmek için adaptör fonksiyonlarını yapmak zorunda kalabilirsiniz (sistem lib'leri biraz farklı argümanlar aldığında) ama sonunda bunun gerçekten faydalı olduğunu buldum ve yeni bir platform oluşturmayı çok daha kolay hale getirdim gelecekte.

0

Eğer GCC varsa bir verilen sistem için varsayılan önişlemci semboller arasında bakmak istiyorsanız (örneğin, Mac OS X, iOS, Linux), böylece komut satırından tam bir listesini alabilirsiniz:

echo 'main(){}' | cpp -dM 

Bu önişlemci faaliyet gösterdiği de derleme aşamasında olduğu gibi, sembollerin çoğu sistemi değil de derleyici barındıran tek sistemin işletim sistemini ve CPU tipini tanımlamak, ancak çoğu zaman sınırlı kullanımı vardır hedefleniyor (örneğin iOS için çapraz derleme yaparken). Mac OS X ve iOS hedef alındığı sistemin derleme zamanı karakteristiklerini belirlemek için doğru giderken bu o zaman olabilir şu anda kullanılan Platformu ve SDK TargetConditionals.h pick up ve olacaktır

#include <TargetConditionals.h> 

olduğunu Makroların bazılarındaki (örneğin) endianness ve diğer bazı özellikleri belirler. (Ne tür bir bilgi toplayabileceğinizi görmek için TargetConditionals.h'ye bakın.)

+0

-dM çıktısının kontrol edilmesine yardımcı olabilse de, önceden sourceforge wiki sayfası kadar fazla bilgi garanti edemez. – rubenvb

İlgili konular