2009-03-15 14 views
12

मैं वर्तमान में autotools से CMake तक एक छोटी सी परियोजना को परिवर्तित कर रहा हूं।सीएमके में हेडर फाइलों और लाइब्रेरी फ़ंक्शंस को कैसे जांचें जैसे यह ऑटोटूल में किया जाता है?

वर्ष configure.in में मैं निम्नलिखित लाइनों का उपयोग कर अस्तित्व के लिए हर शीर्षक और पुस्तकालय समारोह जाँच:

# Checks for header files 
AC_HEADER_STDC 
AC_CHECK_HEADERS([stdlib.h time.h math.h sys/stat.h errno.h unistd.h fcntl.h signal.h]) 

# Checks for library functions 
AC_FUNC_FORK 
AC_CHECK_FUNCS([time localtime mktime gmtime exit fork chdir atol signal]) 
AC_FUNC_STRFTIME 

यह क्या कई autotools परियोजनाओं कर AFAIK है।

इस तथ्य के बावजूद कि संकलक पहले से ही आवश्यक हेडर फाइलों और लाइब्रेरी फ़ंक्शंस के लिए लिंकर चेक के लिए जांच करता है, मेरे कोड को अभी भी #ifdef HAVE_FOOBAR और समान रूप से इसके संकलन झंडे को व्यवस्थित करने के लिए कॉन्फ़िगर चरण पर किए गए इन चेकों की आवश्यकता है।

इस मामले में, सीएमके के साथ शीर्षलेख/कार्यों की जांच करने का सबसे अच्छा अभ्यास क्या है?

उत्तर

10

आप आसानी से बंदरगाह सीधे CHECK_FUNCTION_EXISTS, CHECK_INCLUDE_FILE, CHECK_TYPE_SIZE, आदि के साथ भी कुछ सलाह के लिए CMake_HowToDoPlatformChecks देख सकते हैं।


इस शैली में विन्यास (यानी आप ucontext.h और setjmp.h के लिए जाँच करें और एक वर्तमान उपयोग कर सकते हैं, #ifdef HAVE_UCONTEXT या #ifdef HAVE_SETJMP के साथ अपने कोड को संशोधित) पोर्टेबिलिटी कहते हैं।

इसके अलावा, जब आप अपना आवेदन वितरित करते हैं, तो आप संकलन त्रुटि (उपयोगकर्ताओं के लिए) और इस तरह एक अच्छी बिल्ड सिस्टम के साथ बचने से बचना चाहते हैं, तो आप अपने ऐप को वितरित करने से पहले अधिकांश आर्किटेक्चर मतभेदों को संभाल सकते हैं।

गैर प्रोग्रामर को यह समझना आसान है कि अगर "gtk + हेडर की जांच - असफल" की जांच की जाती है, तो उन्हें एक ही चीज़ कहने वाली संकलन त्रुटि रेखाओं का एक समूह होने के बजाय gtk इंस्टॉल करना होगा, लेकिन अधिकांश के लिए पठनीय नहीं है उनमें से :)

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^