makefile - 如何让automake不那么难看?

标签 makefile automake gnu-make

我最近学会了如何使用 automake,我有点恼火的是我的编译命令来自一堆:

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

有什么办法可以清理掉吗?我通常可以轻松地找出警告消息,但现在要阅读的文本墙扩大了 3 倍,而且更加奇怪。

我知道我的标志是什么,所以让它只为每个文件显示“编译 xxx.cpp”将是完美的。

最佳答案

从automake 1.11开始,您可以使用silent-rules选项极大地清理输出。例如:

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

所需要做的就是将“silent-rules”添加到调用中 在configure.ac中添加AM_INIT_AUTOMAKE,并添加该选项 --enable-silent-rules 当您调用配置时。 (那里 关于是否需要添加该选项存在很多争议 在配置时添加此功能,并且有 是一个简单的解决方法,可以使其变得不必要。)请注意 启用静默规则后,您仍然可以得到详细信息 通过运行“make V=1”输出

关于makefile - 如何让automake不那么难看?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2886559/

相关文章:

makefile - 依赖于 make 文件本身

内部带有变量的 Makefile 通配符

linux - := and += in make file?有什么区别

linux - 从源代码构建 Octave 包

python - 如果 Python 可用,则有选择地启用测试程序 - automake

linux - autotools 中的 automake 错误消息

linux - 如何在Linux上查找指定目录中所有使用特定 header 的文件?

c - Automake + 库工具 : pattern rule for per-object CFLAGS?

makefile - 模式规则中的通配符

c - GNU gcc 编译器无法处理部分包含语句