通常,当我与其他人一起处理项目时,随着时间的推移,库文件路径的数量和包含在Makefile中由编译器获取的路径的数量会越来越多.路径也可以变得很长.
这是一个例子:
g++ -c -pipe -O2 -Wall -W -DQT_BOOTSTRAPPED -DQT_MOC -DQT_NO_CODECS -DQT_LITE_UNICODE -DQT_NO_LIBRARY -DQT_NO_STL -DQT_NO_COMPRESS -DQT_NO_DATASTREAM -DQT_NO_TEXTSTREAM -DQT_NO_TEXTCODEC -DQT_NO_UNICODETABLES -DQT_NO_THREAD -DQT_NO_REGEXP -DQT_NO_QOBJECT -DQT_NO_SYSTEMLOCALE -DQT_NO_GEOM_VARIANT -DQT_NO_USING_NAMESPACE -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -I../../../mkspecs/qws/linux-generic-g++ -I. -I../../corelib/arch/generic -I../../../include -I. -I../../../include/QtCore -I. -I.uic/release-shared -o release-shared/moc.o moc.cpp
我想知道你使用什么样的配方来使编译器行更短,同时仍然让用户可以选择显示原始行,如果他们以后真的需要这些信息.
有自动执行此操作的工具吗?
您不仅可以缩短编译器输出,还可以对其进行颜色编码,并添加详细标记.输出看起来像这样:
alt text http://img526.imageshack.us/img526/9572/sconsf.png
这是如何(从SCons Wiki中窃取的颜色主题):
import os,sys colors = {} colors['cyan'] = '\033[96m' colors['purple'] = '\033[95m' colors['blue'] = '\033[94m' colors['green'] = '\033[92m' colors['yellow'] = '\033[93m' colors['red'] = '\033[91m' colors['end'] = '\033[0m' #If the output is not a terminal, remove the colors if not sys.stdout.isatty(): for key, value in colors.iteritems(): colors[key] = '' compile_source_message = '%s\nCompiling %s==> %s$SOURCE%s' % \ (colors['blue'], colors['purple'], colors['yellow'], colors['end']) compile_shared_source_message = '%s\nCompiling shared %s==> %s$SOURCE%s' % \ (colors['blue'], colors['purple'], colors['yellow'], colors['end']) link_program_message = '%s\nLinking Program %s==> %s$TARGET%s' % \ (colors['red'], colors['purple'], colors['yellow'], colors['end']) link_library_message = '%s\nLinking Static Library %s==> %s$TARGET%s' % \ (colors['red'], colors['purple'], colors['yellow'], colors['end']) ranlib_library_message = '%s\nRanlib Library %s==> %s$TARGET%s' % \ (colors['red'], colors['purple'], colors['yellow'], colors['end']) link_shared_library_message = '%s\nLinking Shared Library %s==> %s$TARGET%s' % \ (colors['red'], colors['purple'], colors['yellow'], colors['end']) java_compile_source_message = '%s\nCompiling %s==> %s$SOURCE%s' % \ (colors['blue'], colors['purple'], colors['yellow'], colors['end']) java_library_message = '%s\nCreating Java Archive %s==> %s$TARGET%s' % \ (colors['red'], colors['purple'], colors['yellow'], colors['end']) env = Environment() AddOption("--verbose",action="store_true", dest="verbose_flag",default=False,help="verbose output") if not GetOption("verbose_flag"): env["CXXCOMSTR"] = compile_source_message, env["CCCOMSTR"] = compile_source_message, env["SHCCCOMSTR"] = compile_shared_source_message, env["SHCXXCOMSTR"] = compile_shared_source_message, env["ARCOMSTR"] = link_library_message, env["RANLIBCOMSTR"] = ranlib_library_message, env["SHLINKCOMSTR"] = link_shared_library_message, env["LINKCOMSTR"] = link_program_message, env["JARCOMSTR"] = java_library_message, env["JAVACCOMSTR"] = java_compile_source_message,
用"scons --verbose"编译,看看正常庞大的gcc输出.