आपके कोड पर निर्भर करता है कि सुविधाओं के लिए कॉन्फ़िगर / संकलन समय पर जाँच करने का तरीका है। विशिष्ट उपकरणों के लिए जाँच करना समस्याग्रस्त है क्योंकि झूठी-सकारात्मकता से बचना लगभग असंभव है (कोई व्यक्ति जानबूझकर थोड़े प्रयास से भी आपसे झूठ बोल सकता है) और इस तरह के चेक का उद्देश्य इस सवाल का जवाब देना है: "क्या मैं यहां निर्माण कर सकता हूं? यदि हाँ कोड कोड क्या होना चाहिए? मैं उपयोग कर रहा हूँ? , नहीं "क्या यह एक उपकरण है जिसका नाम मुझे पसंद है?"
इस संदर्भ के अनुसार (सामान्य रूप से पूर्वनिर्धारित मैक्रो पर जानकारी का एक बड़ा स्रोत) आप मैक्रो का उपयोग कर सकते हैं:
__arm__
जीसीसी / शाखा संयोजन का पता लगाने के लिए।
मैंने इसके साथ खदान पर जाँच की:
#include <stdio.h>
int main() {
#ifdef __arm__
printf("Why yes it is, thank you\n");
#endif
return 0;
}
जो वास्तव में संदेश को प्रिंट करता था।
ध्यान दें कि यह सभी शाखा उपकरणों को भी पकड़ लेगा , इसलिए मेरी सिफारिश आपके बिल्ड टूल (जैसे cmake/autoconf
) के हिस्से का उपयोग करने के लिए /opt/vc/include/bcm_host.h
भी होगी।
उदाहरण के लिए
AC_CHECK_HEADERS
ऑटोकॉनफ़ में:
AC_CHECK_HEADERS(/opt/vc/include/bcm_host.h)
का कारण बनता है:
HAVE__OPT_VC_INCLUDE_BCM_HOST_H
config.h में परिभाषित किया जाना है
या CMake के लिए:
include(CheckIncludeFile)
CHECK_INCLUDE_FILE(/opt/vc/include/bcm_host.h BCMHOST)
मुझे नहीं लगता कि यह वास्तव में पता लगाने का एक बेहतर तरीका है - आप हार्डवेयर विशिष्ट चीजों के लिए कॉन्फ़िगर / सीएमके लुक दे सकते हैं, लेकिन एक ही एसओसी के साथ अन्य प्लेटफॉर्म भी होंगे ताकि यहां तक कि वास्तव में विश्वसनीय न हो और आपको वास्तव में क्या परवाह है उस हेडर फ़ाइल का अस्तित्व है, क्योंकि यह आपको बताती है कि दिए गए लक्ष्य के लिए कैसे निर्माण करना है। भले ही आप साबित कर सकते हैं कि यह रास्पबेरी पाई है, लेकिन सही हेडर फ़ाइल नहीं मिल सकती है जो आप अभी भी अटके हुए हैं और जल्दी से एक त्रुटि एक मिस-बिल्ड से बेहतर है।
यदि आप वास्तव में यह जांचना चाहते हैं कि यह एक पाई (या पर्याप्त रूप से समान) है तो आप कुछ सरल का सहारा ले सकते हैं:
grep -o BCM2708 /proc/cpuinfo
या (रसभरी 2 और 3 के लिए):
grep -o BCM2709 /proc/cpuinfo
कॉन्फ़िगर समय पर, जो SoC से मेल खाता है रास्पबेरी पाई पर आधारित है।
आप कुछ और परीक्षणों में फेंक सकते हैं (उदाहरण के लिए USB आपको इसे थोड़ा और अधिक जानने में मदद करेगा और यदि यह एक मॉडल ए या बी डिवाइस है तो भी संकेत देगा), लेकिन कुछ भी निश्चित रूप से कहने के लिए पर्याप्त नहीं है।
आप किसी ज्ञात सूची के विरुद्ध / बूट में फ़ाइलों की हैश की जाँच कर सकते हैं, लेकिन तब आप निर्माण नहीं कर पाएंगे यदि कोई फर्मवेयर अद्यतन या अनौपचारिक है जिसके बारे में आपको जानकारी नहीं है। (या समान बूटिंग सेटअप वाले अन्य गैर-पाई डिवाइस)
__ARMEL__
परिभाषित तरीका बिल्कुल आपके जैसा है__arm__
। मैं अभी तक सबसे अच्छा मैक्रो खोजने के लिए परेशान नहीं था।