2012-03-15 36 views
9

Makefile kapatılamıyor Bir hata ayıklama oturumunda ZBar almaya çalışıyorum. Bunu yapabilirim, ancak optimizatörün kapanmasını sağlayamıyorum, bu yüzden hata ayıklama oturumum beklenmedik şekilde atlar ve birçok değişken Eclipse Indigo'da optimized-out olarak etiketlenir. Ubuntu'da koşuyorum.gcc optimizer, automake

son -O davranan biridir beri, mümkün olduğunca Makefile herhangi gcc çağrısında kadarıyla sağ O0 ekleyerek çalıştılar. Aradığım edilecek olanı bulmak için -Q --help = optimize kullanılır, ancak çıkış biraz tuhaf: Açıkçası

libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -I./zbar -I./include -O0 -O0 -Q --help=optimizers -Wall -Wno-parentheses -O0 -g -O0 -Q --help=optimizers -MT zbar/zbar_libzbar_la-config.lo -MD -MP -MF zbar/.deps/zbar_libzbar_la-config.Tpo -c zbar/config.c -fPIC -DPIC -o zbar/.libs/zbar_libzbar_la-config.o 
The following options control optimizations: 
make[1]: *** [zbar/zbar_libzbar_la-config.lo] Error 1 
    -O<number>       
make: *** [all] Error 2 
    -Ofast        
    -Os        
    -falign-functions     [disabled] 
    -falign-jumps      [disabled] 
    -falign-labels     [disabled] 
    -falign-loops      [disabled] 
    -fasynchronous-unwind-tables  [enabled] 
    -fbranch-count-reg    [enabled] 
    -fbranch-probabilities   [disabled] 
    -fbranch-target-load-optimize  [disabled] 
    -fbranch-target-load-optimize2 [disabled] 
    -fbtr-bb-exclusive    [disabled] 
    -fcaller-saves     [disabled] 
    -fcombine-stack-adjustments  [disabled] 
    -fcommon       [enabled] 
    -fcompare-elim     [disabled] 

etc... 

, ben çeşitli yerlerde O0 koyarak oldum. ZBar tarafından kullanılan automake ile hiç tecrübem yok. Kendi Makefile'imi sıfırdan yapmaya çalışmaktan kaçınmaya çalışıyorum, optimizatörün nerede devre dışı bırakılacağı konusunda bir öneri var mı? Makefiles'ı zaten tüm -O 'ler için ve -f' un optimizasyonla ilgili olarak aramıştım; Ben hiçbir şey bulamadım. Makefile modifikasyon girişimleri yapıldıktan sonra proje temizlendi.

cevap

18

Yapılandırmayı çalıştırdığınızda veya make'i çalıştırdığınızda en iyi duruma getirme seçenekleri devre dışı bırakılabilir. Ya

configure CFLAGS='-g -O0' CXXFLAGS='-g -O0' 

veya

make CFLAGS='-g -O0' CXXFLAGS='-g -O0' clean all 

istediğini yapmalıdır. Yapılandırma sırasında CFLAGS/CXXFLAGS öğesini ayarlarsanız, bu değerler, bunları zaman aşımına uğratmadan yaparken, bunları bir kerelik bir anlaşma olarak geçersiz kılmayacak şekilde yapar.

+2

Hiçbir etkisi yoktur. Kodun yazarı olmadığımı ve bir algoritma analizini tamamlamaya çalıştığımı unutmayın. -O0'u arama çağrısı ile koymak, optimizasyonu sağlamak için -O0'u diğer herhangi bir işaretin önüne koyar ve bu da onu etkili olmaz. Binlerce satırlık Makefile kodunda ayarlanmış herhangi bir optimizasyon bayrağı göremiyorum ... – vlad417

+0

CFLAGS, makefile'de COMPILE içinde ayarlanmış en son öğe olmalıdır, bu nedenle, paket koruyucusu CFLAGS'yi ayarlama girişiminizi geçersiz kılmıyorsa (bir hata olarak bildirilmelidir) ayarınız son olmalıdır. Eğer "CFLAGS = -this-option-is-an-error" yaparsanız, derleme sırasında bu seçenek belirir mi? –

+0

Sahte bayrağı eklediğimde: gcc: error: tanınmayan seçenek ‘-bu seçenek-bir-bir hata var ' – vlad417