2009-02-12 32 views
6

मैं सोच रहा हूं कि मैं एक पोर्टेबल बिल्ड सिस्टम (चरण-दर-चरण) कैसे बना सकता हूं, मैं वर्तमान में सेमेक का उपयोग करता हूं क्योंकि यह केवल एक आर्क लक्ष्य के साथ पहले स्थान पर स्थापित करना आसान था, लेकिन अब मुझे उस लाइब्रेरी को पैकेज करना है जो मैं विकसित कर रहा हूं, मैं सोच रहा हूं कि आर्क के लिए पोर्टेबल बनाने का सबसे अच्छा तरीका कैसा है।सिस्टम और पोर्टेबिलिटी

मुझे पता है कि मुझे आर्क पर निर्भर करता है कि चीजों को परिभाषित करने के लिए मुझे config.h की आवश्यकता है, लेकिन मुझे नहीं पता कि यह कितना स्वचालित हो सकता है।

बिल्ड सिस्टम बनाने का कोई अन्य तरीका गर्मजोशी से स्वागत है!

उत्तर

10

तुम बस CMake उपयोग कर सकते हैं, यह बहुत सीधा है:

autotools पर एक अच्छा प्राइमर के लिए, यहाँ एक नजर है।

आप इन चीजों की आवश्यकता:

पहले, विन्यास बारीकियों पता लगाने के लिए इसका मतलब है। उदाहरण के लिए, यदि आप जानते हैं कि कुछ समारोह कुछ मंच पर अलग नाम है, तो आप TRY_COMPILE कि खोजने के लिए उपयोग कर सकते हैं:

TRY_COMPILE(HAVE_ALTERNATIVE_FUNC 
    ${CMAKE_BINARY_DIR} 
    ${CMAKE_SOURCE_DIR}/alternative_function_test.cpp 
    CMAKE_FLAGS -DINCLUDE_DIRECTORIES=xxx 
) 

जहां alternative_function_test.cpp कि एकमात्र विकल्प परिभाषा के साथ संकलित अपने स्रोत निर्देशिका में एक फाइल है।

यह संकलन सफल होने पर परिवर्तनीय HAVE_ALTERNATIVE_FUNC परिभाषित करेगा।

दूसरा, आपको यह परिभाषा आपके स्रोतों को प्रभावित करने की आवश्यकता है। या तो आप झंडे

IF(HAVE_TR1_RANDOM) 
    ADD_DEFINITIONS(-DHAVE_TR1_RANDOM) 
ENDIF(HAVE_TR1_RANDOM) 

संकलित करने के लिए जोड़ सकते हैं या आप एक config.h फ़ाइल बना सकते हैं। निम्न पंक्ति

#cmakedefine HAVE_ALTERNATIVE_FUNCS 

साथ config.h.in बनाएँ और CMakeLists.txt में इस लाइन द्वारा एक config.h फ़ाइल बनाने (CONFIGURE_FILE देख)

CONFIGURE_FILE(config.h.in config.h @ONLY) 

#cmakedefine CMake चर पर निर्भर करता है #define या #undef लिए अनुवाद किया जाएगा।

Btw, परीक्षण edianness के लिए, this mail

2

मैं जीएनयू ऑटोकॉन्फ़/ऑटोमैट टूलचैन का उपयोग कर रहा हूं जिसने अब तक मेरे लिए अच्छा काम किया है। मैं वास्तव में लिनक्स/x86 (और 64 बिट) और मैक पर ध्यान केंद्रित कर रहा हूं, यदि आप एंडियन मुद्दों के कारण पावरपीसी पर निर्माण कर रहे हैं तो यह महत्वपूर्ण है।

autoconf साथ

आप मैक्रो के साथ मेजबान मंच की जाँच कर सकते हैं:

AC_CANONICAL_HOST 

और का उपयोग कर endianness की जाँच करें:

AC_C_BIGENDIAN 

Autoconf तो जो आप में उपयोग कर सकते हैं config.h लिए परिभाषाएँ जोड़ देगा तुम्हारा कोड।

मैं निश्चित नहीं हूं (कभी कोशिश नहीं की है) जीएनयू ऑटोोटूल विंडोज पर कितनी अच्छी तरह काम करते हैं, इसलिए यदि विंडोज आपके लक्ष्यों में से एक है तो आप अपने मौजूदा सेमेक बिल्ड सिस्टम के साथ समान कार्यक्षमता ढूंढने से बेहतर हो सकते हैं।

http://www.freesoftwaremagazine.com/books/autotools_a_guide_to_autoconf_automake_libtool

+0

खिड़कियों को देखने मैं आशा मेरे लिए एक लक्ष्य कभी नहीं होगा;) – claf