2011-09-19 65 views
3

我在CentOS 5.7系統上運行。rpmbuild:我如何使用rpmbuild告訴autoconf或配置禁用一個標誌?

我從別人那裏下載了一個源碼包和一個.spec文件。我試圖使用vanilla命令從源代碼構建RPM,如:

% rpmbuild -ba ~/rpmbuild/SPECS/foo.spec 
... 
Configuration summary: 
====================== 

    Host type................: x86_64-redhat-linux-gnu 
    CC.......................: gcc 
    CFLAGS...................: -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Werror 

    Package..................: sudosh2 
    Version..................: 1.0.4 

    Installation prefix......: /usr 
    Man directory............: /usr/share/man 
    sysconfdir...............: /etc 
    recording input..........: no 

但是,此構建失敗。該代碼有點草率,正在產生一些警告。該工具鏈的某些部分啓用了-Werror標誌,這使得「all warnings into errors」。因此,構建失敗,出現錯誤:

gcc -DHAVE_CONFIG_H -I. -I..  -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Werror -MT parse.o -MD -MP -MF .deps/parse.Tpo -c -o parse.o parse.c 
cc1: warnings being treated as errors 
sudosh.c: In function 'main': 
sudosh.c:486: warning: unused variable 'written' 
sudosh.c:112: warning: unused variable 'found' 
cc1: warnings being treated as errors 
parse.c: In function 'parse': 
parse.c:20: warning: unused variable 'y' 
parse.c:14: warning: unused variable 'opt' 
parse.c:14: warning: unused variable 'cmt' 
parse.c:14: warning: unused variable 'arg' 
parse.c:10: warning: unused variable 'i' 
parse.c:10: warning: unused variable 'line_number' 
make[2]: *** [sudosh.o] Error 1 

我知道正確的解決方法就是筆者修復代碼,但我想解決這個問題,在短期內。我需要一個工作RPM。

它看起來像./configureautoconf正在自動添加-Werror標誌。我如何禁用我的構建的-Werror標誌,而不是自己編輯Makefile?

響應@ pwan的答案更新:

代表.spec文件是非常通用的,不指定任何特殊標誌:

%build 
%configure \ 
    --program-prefix="%{?_program_prefix}" 
%{__make} %{?_smp_mflags} 
+0

我發現這是由'-Werror'標誌而不是'-Wall'標誌造成的。更新了我的答案。 –

回答

1

How can I disable the -Werror flags for my builds, short of editing the Makefile myself?

GCC手冊在3.8 Options to Request or Suppress Warnings解決方案:

You can request many specific warnings with options beginning -W', for example -Wimplicit to request warnings on implicit declarations. Each of these specific warning options also has a negative form beginning -Wno-' to turn off warnings; for example, -Wno-implicit. This manual lists only one of the two forms, whichever is not the default.

因此,設置-Wno-error的CFLAGS環境變量的伎倆我。現在我知道我在找什麼,我可以看到Stackoverflow有很多答案:https://stackoverflow.com/search?q=%22-Wno-%22,特別是how to disable specific warning when -Wall is enabled

在我的具體情況,構建是失敗是由於「警告:未使用的變量」,我可以抑制與-Wno-unused-variable這些特定的警告

由於我使用的rpmbuild,我需要把這個在.spec文件由@pwan建議。我可以想出解決辦法的唯一辦法是:

  1. 創建RPM一次:

    rpmbuild -v -bb ~/rpmbuild/SPECS/sudosh.spec 
    
  2. 搜索CFLAGS這是由./configure

    Configuration summary: 
    ====================== 
    
        Host type................: x86_64-redhat-linux-gnu 
        CC.......................: gcc 
        CFLAGS...................: -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Werror 
    
  3. 手動生成將這些CFLAGS附加到我的.spec文件中,放入`%configure%部分:

    %configure \ 
        --program-prefix="%{?_program_prefix}" 
    #%{__make} %{?_smp_mflags} 
    %{__make} %{?_smp_mflags} CFLAGS="-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Werror -pedantic-errors -Wno-unused-variable -ansi -std=c99" 
    

上面是一個小問題,因爲如果./configure腳本改變上游,我可能需要重新調整我的.spec文件中的CFLAGS。

1

有沒有真正足夠的信息給予了詳細的解答,但你應該專注於spec文件中的%prep部分。

如果幸運的話,本節將調用configure。然後,您應該能夠查看配置腳本提供的參數,並找出哪個負責-Wall標誌。運行'configure --help'可以列出可用的標誌。

那麼你應該能夠更新的規範文件,以便配置調用包括將跳過添加到-Wall CFLAGS

的標誌您可能還可以用設置環境變量CFLAGS脫身在configure調用期間,但配置腳本可能忽略或覆蓋這些。

CFLAGS="-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Werror" configure --whatever 
+0

感謝您的回答。你說:「那麼你應該能夠更新spec文件,這樣配置調用就會包含那些跳過將-Wall添加到CFLAGS的標誌,但我該怎麼做?我怎麼能告訴'。/ configure'跳過'-Wall'標誌? –

+0

我會給予你賞金,因爲你幫助我設定了正確的方向。 –