2011-09-19 2 views
3

CentOS 5.7 시스템에서 실행됩니다.rpmbuild : rpmbuild를 사용하여 autoconf에 알리거나 플래그를 비활성화하도록 구성하려면 어떻게해야합니까?

소스 패키지와 .spec 파일을 다른 사람으로부터 다운로드했습니다. 나는 같은 바닐라 명령을 사용하여 소스에서 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이 필요합니다.

./configure 또는 autoconf이 자동으로 -Werror 플래그를 추가하는 것처럼 보입니다. Makefile을 직접 편집하지 않고 내 빌드에 대한 -Werror 플래그를 비활성화 할 수 있습니까? @ pwan의 대답에 응답

업데이트 :

을 .spec 파일이 꽤 일반적이며, 특별한 플래그를 지정하지 않습니다

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

이 문제는'-Wall' 플래그가 아닌'-Werror' 플래그로 인해 발생한다는 것을 발견했습니다. 내 대답이 업데이트되었습니다. –

답변

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의 솔루션을 제공합니다. 이제 내가 뭘 찾고 있는지 알면 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을 : ./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 
    
  2. 수동에 의해 생성되는 CFLAGS에 대한

    rpmbuild -v -bb ~/rpmbuild/SPECS/sudosh.spec 
    
  3. 검색 이 CFLAGS를 .spec 파일의`% configure % section '에 추가하십시오 :

    ./configure 실행 스크립트 상류 변경되면 내을 .spec 파일을 다시 조정 CFLAGS해야 할 수 있기 때문에 1,

위는 조금 해킹 틱입니다.

1

자세한 대답을 줄 수있는 정말 충분한 정보가 아니다을 하지만 spec 파일의 % prep 섹션에 집중해야합니다.

운이 좋으면이 섹션에서 configure를 호출합니다. 그런 다음 configure 스크립트가 제공하는 인수를보고 어느 것이 -Wall 플래그를 담당하는지 알아낼 수 있어야합니다. 'configure --help'를 실행하면 사용 가능한 플래그가 나열 될 수 있습니다. 구성 호출이 CFLAGS

에 -Wall을 추가 건너 것 플래그 당신은 또한 CFLAGS 환경 변수를 설정 멀리받을 수 있습니다 포함되어 있으므로

그런 다음 당신은 스펙 파일을 업데이트 할 수 있어야한다 configure 호출 중에는 configure 스크립트가이를 무시하거나 무시할 수 있습니다. 그래서

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.

의 CFLAGS 환경 변수가 나를 위해 속임수를 썼는지 -Wno-error 설정 :

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

답해 주셔서 감사합니다. "그러면 configure 파일에 -Wall을 CFLAGS에 추가하는 것을 건너 뛸 플래그가 configure 파일을 업데이트 할 수 있어야합니다.하지만 어떻게해야합니까? './configure'가'-Wall' 플래그를 건너 뛰도록 어떻게 말할 수 있습니까? –

+0

나는 올바른 방향으로 나를 세우는 것을 도왔으므로 현상금을 줄 것이다. –

관련 문제