2010-05-22 30 views
11

Gần đây tôi đã học được cách sử dụng automake, và tôi hơi bực mình rằng lệnh biên dịch của tôi đã đi từ một loạt các:Làm thế nào để làm cho automake ít xấu xí?

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

Để một bó:

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 

Có cách nào để dọn dẹp cái này? Tôi thường có thể dễ dàng chọn ra các thông báo cảnh báo, nhưng bây giờ bức tường của văn bản để đọc mặc dù là 3x lớn hơn và nhiều weirder.

Tôi biết lá cờ của mình là gì, do đó, làm cho nó chỉ nói "Biên dịch xxx.cpp" cho mỗi tệp sẽ là hoàn hảo.

Trả lời

18

Khi tự động 1.11, bạn có thể làm sạch đầu ra bằng cách sử dụng tùy chọn quy tắc im lặng. Ví dụ:

 
$ # 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 

Tất cả những gì cần thiết là để thêm "im lặng quy tắc" để gọi của AM_INIT_AUTOMAKE trong configure.ac, và thêm tùy chọn enable-im lặng-quy tắc khi bạn gọi cấu hình. (Có đã có nhiều cuộc tranh luận về việc yêu cầu thêm tùy chọn vào thời điểm định cấu hình khi tính năng này được thêm vào, và có là một giải pháp dễ dàng để làm cho nó không cần thiết.) Lưu ý rằng với quy tắc im lặng được bật, bạn vẫn có thể nhận được tiết đầu ra bằng cách chạy 'make V = 1'

+6

Có vẻ như tất cả những gì cần thiết để đặt mặc định là thêm AM_SILENT_RULES ([có]). Điều này thật đúng với gì mà tôi đã tìm kiếm. –

+1

Cảm ơn; tự thêm 'AM_SILENT_RULES ([yes])' vào 'configure.ac', ngay sau dòng' AM_INIT_AUTOMAKE', đã thực hiện thủ thuật. Sản lượng đẹp hơn nhiều. –

+0

Xin lỗi vì đã necrocommenting ở đây ... Tôi đang gặp vấn đề tương tự như poster gốc. Đối với tôi, nó sẽ là tốt nếu đầu ra của tôi trông giống như ví dụ ban đầu "không có các quy tắc im lặng" của bạn. Điều đó có vẻ khá chuẩn. Nhưng tôi đi kèm với tất cả các loại dòng sed như OP's, đặc biệt là đối phó với biến "depbase". Nó thực sự khá khó trên mắt. Có cách nào để chỉ làm sạch phần đó ra và để lại các lệnh biên dịch? –

4

Tôi đã làm một chút googling xung quanh như tôi đang ở trong cùng một thuyền, các công cụ autoconf làm một công việc tốt đẹp nhưng nó loại wrecks đôi mắt của bạn khi văn bản whizzes bởi và không có cách nào biết ... đây là một liên kết đến một blog đề cập đến một công cụ để làm điều này và làm cho nó trông giống như gọn gàng giống như cách bạn nhìn thấy một build kernel thực hiện sự kỳ diệu tức là

 
Compiling foo.so 
Linking foo.so 

Dưới đây là một liên kết đến một công cụ được gọi là prettify automake .

+0

Cả hai liên kết đều đã chết. –

Các vấn đề liên quan