2013-10-23 7 views
6

मैं एक पैकेज है जो कई makefiles प्रदान करता है का निर्माण कर रहा हूँ, प्रत्येक makefile मुश्किल की तरहक्या जीसीसी के लिए कोई विकल्प है जो ध्वज को छोड़ देता है?

CFLAGS = -g -O2 -Wall ... 
CXXFLAGS = -g -O2 -Wall ... 

मैं -g विकल्प अभी नहीं करना चाहते ओर कुछ में कोडित है, लेकिन मैं (सभी makefiles संपादित करने के लिए नहीं करना चाहती भी स्वचालित रूप से साथ नहीं sed या कुछ समान)। configure स्क्रिप्ट जो पैकेज के साथ आता है, में डीबग विकल्प को सक्षम/अक्षम नहीं किया गया है, लेकिन मैं इसे CFLAGS और CXXFLAGS वैरिएबल पास कर सकता हूं और यह CFLAGS और CXXFLAGS चर के क्रमशः उनके मानों को जोड़ता है जिसमें -g विकल्प शामिल है।

क्या कोई विकल्प है जो -g को निर्दिष्ट किए जाने पर छोड़ देगा? जैसे

gcc -option-im-looking-for -g file.c -o file 

कुछ डिबग प्रतीकों के बिना द्विआधारी file निर्माण करेंगे। मैं बाइनरी को पट्टी नहीं करना चाहता, मैं चाहता हूं कि इसे छीन लिया जाए।

+0

हमम आप एक स्क्रिप्ट लिख सकते हैं जिसे mygcc कहा जाता है जो प्राप्त तर्कों का विश्लेषण करता है, अवांछित पैरा स्ट्रिप्स करता है, और जीसीसी कॉल करता है। फिर कंपाइलर के रूप में mygcc का उपयोग करें। मुझे इस जवाब पर गर्व नहीं है ^^ –

उत्तर

9

आप -g0 जोड़कर-g के प्रभाव नकारना सकता। कह रही है

gcc -g -g0 foo.c -o file.o 

एक प्राप्त करने के लिए एक द्विआधारी समान उत्पादन होगा

gcc foo.c -o foo.o 

कह man gcc का हवाला देते हुए द्वारा:

-glevel 
    ... 
     Level 0 produces no debug information at all. Thus, -g0 negates 
     -g. 
+0

आप आदमी हैं! आपके उत्तर के लिए धन्यवाद – e271p314

1

आपको मेकफ़ाइल संपादित करने की आवश्यकता नहीं है। बस कमांड लाइन पर चर ओवरराइड:

$ cat Makefile 
CFLAGS = -g -Wall 
all: 
    echo $(CFLAGS) 
$ make 
echo -g -Wall 
-g -Wall 
$ make CFLAGS=-Wall 
echo -Wall 
-Wall 
+0

लेकिन सीएफएलजीएस एक बहुत लंबी लाइन है (लगभग 100 विकल्प, आदि शामिल हैं), मुझे नहीं पता कि सीएफएलजीजी क्या होना चाहिए। मुझे पता है कि मुझे इसके बारे में क्या पसंद नहीं है लेकिन मैं समझ नहीं पा रहा हूं कि इसे कैसे ठीक किया जाए। – e271p314

0

के बाद से CFLAGS एक बैश चर आप इस्तेमाल कर सकते हैं पैटर्न प्रतिस्थापन $ है {var/पैटर्न/प्रतिस्थापन} को हटाने के लिए $ {CFLAGS/-g //} की तरह कुछ। Parameter Substitution

+1

CFLAGS मेकफ़ाइल में एक हार्डकोडेड स्ट्रिंग है। मैं 'find -name मेकफ़ाइल का उपयोग कर सकता था। | xargs sed -i/sg // g''। लेकिन मुझे क्यों चाहिए? मुझे बस इतना करना है कि [devnull] (http://stackoverflow.com/users/2235132/devnull) कहता है। जब मैं 'कॉन्फ़िगर' चलाता हूं तो मैं CFLAGS = -g0 जोड़ता हूं और समस्या हल हो जाती है। – e271p314

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