2008-12-04 16 views
19

में हेडर के लिए निर्देशिका जोड़ना हैलो मैं आपको पूछना चाहता हूं, अगर कोई जानता है कि मेकफ़ाइल में हेडर फ़ाइलों के लिए निर्देशिका कैसे जोड़ सकता हूं तो त्रुटि * से बचने के लिए, मैंने यह कोशिश नहीं की है चारा नहीं काम नहीं करता:मेकफ़ाइल

INC_PATH := -I /directory/to/add 

उत्तर

14

हालांकि लक्ष्य अंततः है (जैसा ने सुझाव दिया 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 द्वारा उत्पन्न स्क्रिप्ट है, इसलिए वे नहीं उन बिट्स को सही करने के बारे में चिंता करने की ज़रूरत है। हालांकि, इस यूएफएलजीएस विकल्प सहित इस कोड के लिए एक मजबूत अनुवांशिक समानता है।

ध्यान दें कि मेकफ़ाइल बिल्डिंग के लिए कई प्रणालियों में सीएफएलजीएस को बेहद समान तरीके से सेट करने के लिए एक तंत्र है - और बस सीएफएलजीएस को असाइन करने से सिस्टम द्वारा किए गए अच्छे काम को कम कर दिया जाता है। लेकिन आपको अपने मेकफ़ाइल को इसे समझने में सक्षम होने के लिए समझना होगा।

]

18

जीएनयू बनाने के कम से कम के लिए, अंतर्निहित चर CFLAGS कोशिश, के रूप में:

CFLAGS=-I/directory/to/add