2009-05-20 14 views
6

Çoğu zaman başkalarıyla bir proje üzerinde çalışırken, kütüphane yollarının miktarı ve Makefile'de derleyici tarafından elde edilen yollar, zaman geçtikçe daha fazla sayı alır. Ayrıca yollar da çok uzun olabilir. İşte Derleyici satırlarını daha kısa yapmak için ne yaparsınız?

bir örnek:

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 

Ben, tarifler ne tür derleyici hatları çok daha kısa yapmak için kullanmak merak ediyorum hala gerçekten bu bilgi gerekirse ham satır görüntülemek için seçeneği kullanıcıya verirken sonra.

Bunu otomatik olarak yapan araçlar var mı?

cevap

3

Ortam değişkenleri nasıl kullanılır? Gerçek komutlar ve bunların parametreleri yalnızca hata veya uyarıları üzerine halde gösterilmesi

export LONGPATH=/usr/local/projects/include/foo/system/v1 
gcc foo.c -o foo -I$LONGPATH 

daha karmaşık senaryolar için, bir, derleyici çağırmak için sarmalayıcılarını kullanabilirsiniz. Örneğin cmake kullanarak, geleneksel çıktıların büyük bir kısmı ağır bir şekilde aşağıya çekilmiştir.

Benzer şekilde, spec files with gcc'u kullanma olasılığı vardır.

örn: scons olarak

+0

+1 teknik özellikleri için –

+0

Özellik dosyalarını kullanarak herhangi bir gerçek dünya örneği? – florin

1

, ben uzun komutlar daha okunabilir hale getirmek için benim komuta jeneratörler içine yeni satır eklemek

tool \ 
    -opt1 bar1 \ 
    -opt2 bar2 \ 
    -opt3 bar3 \ 
    -opt4 bar4 

Ardından, dağınıklığı azaltmak için komut dizesini oluştururken yerel bir yöntem oluşturuyorum.

cmds = [] 
def l(line,indent=1): 
    cmds.append(indent*' '+line) 
l('tool',0) 
l('-opt1 bar1') 
l('-opt2 bar2') 
l('-opt3 bar3') 
l('-opt4 bar4') 

return '\\\n'.join(cmds) 
4

o da derleyici çizgisini tekrar yapmamak için elinizden Makefile değiştirebilir, ancak bunun yerine böyle bir şey olması, o sıkıntı olur 'yapmak' sırasında büyük hatlarının çoğunlukla dışarı sıçraması ise:

 .cpp.o: 
      @echo $(CC) $< 
      @$(CC) $(FLAGS) -c -o [email protected] $< 

'@', komut satırının yankısını bastırır

7

Sadece derleyici çıktınızı azaltamaz, renk kodları yazabilir ve ayrıntılı bir bayrak ekleyebilirsiniz. Normal hantal gcc görmek için "scons --verbose" ile

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, 

Derleme:

İşte alt text http://img526.imageshack.us/img526/9572/sconsf.png

nasıl (Scons Wiki çalınan renk teması) var: çıktı bu gibi bir şey olacaktır çıktı.

İlgili konular