2010-05-22 13 views
11

मैंने हाल ही में ऑटोमेक का उपयोग करने के बारे में सीखा है, और मैं कुछ हद तक नाराज हूं कि मेरे संकलन आदेशों का एक गुच्छा से चला गया:स्वस्थ कम बदसूरत कैसे करें?

g++ -O2 -Wall -c fileName.cpp 

का एक गुच्छा:

depbase=`echo src/Unit.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\ 
    g++ -DHAVE_CONFIG_H -I. -I./src  -g -O2 -MT src/Unit.o -MD -MP -MF $depbase.Tpo -c -o src/Unit.o src/Unit.cpp &&\ 
    mv -f $depbase.Tpo $depbase.Po 

क्या साफ करने का कोई तरीका है यह उपर? मैं आमतौर पर चेतावनी संदेशों को आसानी से चुन सकता हूं, लेकिन अब पाठ की दीवार पढ़ने के लिए 3x बड़ा और बहुत कमजोर है।

मुझे पता है कि मेरे झंडे क्या हैं, इसलिए यह सिर्फ यह कहता है कि प्रत्येक फ़ाइल के लिए "xxx.cpp संकलित करना" सही होगा।

उत्तर

18

ऑटोमेक 1.11 के रूप में, आप चुप-नियम विकल्प का उपयोग करके आउटपुट को बहुत साफ कर सकते हैं। उदाहरण के लिए:

 
$ # First, make without silent rules 
$ make 
make all-am 
gcc -DHAVE_CONFIG_H -I.  -g -O2 -MT foo.o -MD -MP -MF .deps/foo.Tpo -c -o foo.o foo.c 
mv -f .deps/foo.Tpo .deps/foo.Po 
/bin/sh ./libtool --tag=CC --mode=link gcc -g -O2 -o foo foo.o 
libtool: link: gcc -g -O2 -o foo foo.o 
gcc -DHAVE_CONFIG_H -I.  -g -O2 -MT bar.o -MD -MP -MF .deps/bar.Tpo -c -o bar.o bar.c 
mv -f .deps/bar.Tpo .deps/bar.Po 
/bin/sh ./libtool --tag=CC --mode=link gcc -g -O2 -o bar bar.o 
libtool: link: gcc -g -O2 -o bar bar.o 
gcc -DHAVE_CONFIG_H -I.  -g -O2 -MT baz.o -MD -MP -MF .deps/baz.Tpo -c -o baz.o baz.c 
mv -f .deps/baz.Tpo .deps/baz.Po 
/bin/sh ./libtool --tag=CC --mode=link gcc -g -O2 -o baz baz.o 
libtool: link: gcc -g -O2 -o baz baz.o 
gcc -DHAVE_CONFIG_H -I.  -g -O2 -MT qux.o -MD -MP -MF .deps/qux.Tpo -c -o qux.o qux.c 
mv -f .deps/qux.Tpo .deps/qux.Po 
/bin/sh ./libtool --tag=CC --mode=link gcc -g -O2 -o qux qux.o 
libtool: link: gcc -g -O2 -o qux qux.o 
$ # Now, use the silent rules 
$ ./configure --enable-silent-rules > /dev/null 
$ make clean all 
rm -f foo bar baz qux 
rm -rf .libs _libs 
rm -f *.o 
rm -f *.lo 
make all-am 
    CC  foo.o 
    CCLD  foo 
    CC  bar.o 
    CCLD  bar 
    CC  baz.o 
    CCLD  baz 
    CC  qux.o 
    CCLD  qux 

सब की जरूरत है configure.ac में AM_INIT_AUTOMAKE के आह्वान को "मूक-नियम" जोड़ने के लिए, और विकल्प --enable-मूक-नियम जोड़ने जब आप कॉन्फ़िगर आह्वान करने के लिए है। ( इस सुविधा को जोड़ने के दौरान कॉन्फ़िगरेशन समय पर को जोड़ने के विकल्प की आवश्यकता के बारे में बहुत बहस थी, और इसे अनावश्यक बनाने के लिए एक आसान कामकाज है।) ध्यान दें कि चुप-नियम सक्षम के साथ, आप अभी भी वर्बोज़ प्राप्त कर सकते हैं 'मेक वी = 1'

+6

ऐसा लगता है कि इसे डिफ़ॉल्ट बनाने के लिए यह सब कुछ है AM_SILENT_RULES ([yes]) जोड़ना। यही वह है जिसकी तलाश में मैं हूं। –

+1

धन्यवाद; 'AM_INIT_AUTOMAKE' पंक्ति के ठीक बाद, 'AM_SILENT_RULES ([yes])' को' config.ac' पर जोड़कर, चाल चल रही थी। बहुत अच्छा आउटपुट। –

+0

यहां necrocommenting के लिए खेद है ... मुझे मूल पोस्टर के समान समस्या है। मेरे लिए, यह ठीक होगा अगर मेरा मेक आउटपुट आपके शुरुआती "चुप नियमों के बिना" उदाहरण जैसा दिखता है। यह बहुत मानक लगता है। लेकिन मेरा ओपी की तरह सभी प्रकार की sed लाइनों के साथ आता है, विशेष रूप से "depbase" चर के साथ dealling। यह आंखों पर ईमानदारी से काफी कठिन है। क्या उस भाग को साफ़ करने और संकलन आदेश छोड़ने का कोई तरीका है? –

4

मैंने एक ही नाव में चारों ओर घूमते हुए थोड़ा सा काम किया, ऑटोकॉन्फ टूल्स एक अच्छी नौकरी करते हैं, लेकिन जब टेक्स्ट चौंक जाता है और यह जानने का कोई तरीका नहीं है कि यह किस चीज के बारे में है ... यहाँ एक blog कि बस की तरह आप कैसे देखते हैं एक कर्नेल निर्माण यानी

 
Compiling foo.so 
Linking foo.so 

यहाँ जादू करता है ऐसा करने और यह neater की तरह लग रहे बनाने के लिए एक उपकरण का उल्लेख करने के लिए एक कड़ी के लिए एक उपकरण है कि prettify automake कहा जाता है के लिए एक और कड़ी है ।

+0

चलाकर आउटपुट दोनों लिंक मर गए हैं। –

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