हालांकि लक्ष्य अंततः है (जैसा ने सुझाव दिया CFLAGS का मूल्य प्रभावित करने के लिए @unwind), अक्सर सीएफएलजीएस के मूल्य को निर्धारित करने के लिए यह एक अच्छा विचार नहीं है दस कई टुकड़ों से बना है। आपको मेकफ़ाइल की संरचना, और मैक्रोज़ का सेट इस्तेमाल करना होगा।
[जोड़ा गया:
एडुआर्डो पूछा: तुम मैक्रो पोस्ट कर सकते हैं भी ऐसा ही करने के लिए?
हां, लेकिन क्या वे सहायक हैं इस पर निर्भर करता है कि आपके मेकफ़ाइल कैसे संरचित किए जाते हैं। मेरे मेकफ़ाइल में से एक से यहां एक मामूली जटिल उदाहरण है।
CC = gcc -g
XFLAGS = -Wall -Wshadow -Wstrict-prototypes -Wmissing-prototypes \
-DDEBUG -Wredundant-decls
#CC = cc -g
#XFLAGS =
UFLAGS = # Always overrideable on the command line
DEPEND.mk = sqlcmd-depend.mk
INSTALL.mk = sqlcmd-install.mk
ESQLC_VERSION = `esqlcver`
OFLAGS = # -DDEBUG_MALLOC -g
OFLAGS = -g -DDEBUG -O4
PFLAGS = -DHAVE_CONFIG_H
OFILES.o = # rfnmanip.o # malloc.o # strdup.o # memmove.o
VERSION = -DESQLC_VERSION=${ESQLC_VERSION}
#INC1 = <defined in sqlcmd-depend.mk>
#INC2 = <defined in sqlcmd-depend.mk>
INC3 = /usr/gnu/include
INC4 = ${INFORMIXDIR}/incl/esql
INC5 = . #${INFORMIXDIR}/incl
INCDIRS = -I${INC3} -I${INC1} -I${INC2} -I${INC4} -I${INC5}
LIBSQLCMD = libsqlcmd.a
STRIP = #-s
LIBC = #-lc_s
LIBMALLOC = #-lefence
LIBRDLN = -lreadline
LIBCURSES = -lcurses
LIBPOSIX4 = -lposix4
LIBG = #-lg
LIBDIR1 = ${HOME}/lib
LIBDIR2 = /usr/gnu/lib
LIBJL1 = ${LIBDIR1}/libjl.a
LIBJL2 = ${LIBDIR1}/libjlss-${ESQLC_VERSION}.a
LIBTOOLS = ${LIBJL2} ${LIBJL1}
LDFLAGS = ${LIBSQLCMD} ${LIBTOOLS} -L${LIBDIR2} ${LIBG} ${LIBMALLOC} \
${LIBPOSIX4} ${LIBC} ${STRIP}
CFLAGS = ${VERSION} ${INCDIRS} ${OFLAGS} ${XFLAGS} ${PFLAGS} ${UFLAGS}
यह मेरा एक कार्यक्रम के लिए एक makefile sqlcmd
कहा जाता है (एक नाम एक दशक और अधिक चुना से पहले माइक्रोसॉफ्ट एक ही नाम के एक आदेश बनाया)। मुझे लगता है कि make
कार्यक्रम सी कोड संकलन की तरह विरोध करने के लिए एक नियम है:
${CC} ${CFLAGS} -c $*.c
और स्थूल वस्तुओं में सूचीबद्ध वस्तु फ़ाइलों का एक सेट से एक कार्यक्रम को जोड़ने के लिए नियम ऐसा दिखता है जैसे:
${CC} ${CFLAGS} -o [email protected] ${OBJECTS} ${LDFLAGS}
जैसा कि आप देख सकते हैं, ESQLC_VERSION के लिए अलग-अलग सेटटेबल मैक्रोज़ हैं (उपयोग में इनफॉर्मिक्स ESQL/C का संस्करण, एक स्क्रिप्ट esqlcver
चलाकर डिफ़ॉल्ट रूप से व्युत्पन्न), फिर INC1 से INC5 और INCFLAGS के माध्यम से निर्देशिकाएं शामिल हैं (वहां कर सकते हैं प्लेटफ़ॉर्म के आधार पर इनमें से बहुत कुछ हो), और ऑप्टिमाइज़र फ्लैग (ऑफ़लाग्स), अतिरिक्त झंडे (CFLAGS), उपयोगकर्ता-निश्चित एड फ्लैग (यूएफएलजीएस - एक मुहावरे जो मैं अपने अधिकांश मेकफ़ाइल में उपयोग करता हूं; यह उपयोगकर्ता को make
कमांड लाइन पर UFLAGS सेट करने और बिल्ड करने के लिए एक अतिरिक्त ध्वज जोड़ने की अनुमति देता है), और लाइब्रेरी से संबंधित मैक्रोज़ का एक गुच्छा। मेरे विकास प्लेटफार्म के लिए मेरे विकास मेकफ़ाइल को कम से कम झगड़ा करने के लिए यह वही है जो कि लिनक्स, सोलारिस या मैकोज़ एक्स हो सकता है। कार्यक्रम के उपभोक्ताओं के लिए, स्क्रिप्ट autoconf
द्वारा उत्पन्न स्क्रिप्ट है, इसलिए वे नहीं उन बिट्स को सही करने के बारे में चिंता करने की ज़रूरत है। हालांकि, इस यूएफएलजीएस विकल्प सहित इस कोड के लिए एक मजबूत अनुवांशिक समानता है।
ध्यान दें कि मेकफ़ाइल बिल्डिंग के लिए कई प्रणालियों में सीएफएलजीएस को बेहद समान तरीके से सेट करने के लिए एक तंत्र है - और बस सीएफएलजीएस को असाइन करने से सिस्टम द्वारा किए गए अच्छे काम को कम कर दिया जाता है। लेकिन आपको अपने मेकफ़ाइल को इसे समझने में सक्षम होने के लिए समझना होगा।
]
स्रोत
2008-12-04 17:43:21