(.deb) 패키지에서 바이너리를 빌드하는 데 사용되는 컴파일러 플래그를 어떻게 얻나요?

(.deb) 패키지에서 바이너리를 빌드하는 데 사용되는 컴파일러 플래그를 어떻게 얻나요?

나는 이것이 apt-get source <package_name>당신에게 소스 패키지를 제공할 것이라는 것을 알고 있습니다. 여기에는 debian이라는 파일이 포함된 폴더가 포함되어 있습니다 rules. 내가 올바르게 이해했다면 이 파일에는 .deb사용해야 하는 컴파일러 플래그를 포함하여 소스 패키지를 패키지 로 변환하는 방법이 설명되어 있습니다 .

두 가지 질문:

  1. 실제 컴파일러 플래그를 사용하려면 어떻게 해야 합니까? 가능하다면 이를 실행해야 합니까 make -n? 아니면 문서를 구문 분석하여 어떻게든 얻을 수 있습니까?
  2. 공식 저장소의 소스 패키지가 제공됩니다. 컴파일러 플래그는 파일에 의해 100% 결정됩니까 , 아니면 파일이 생성된 시스템 rules에 따라 결정됩니까 ? 공식 빌드 프로세스에 사용된 것과 동일한 플래그를 .deb얻으려면 공식 빌드 시스템을 "미러링"해야 합니까 ? .deb어떻게 해야 하나요?

나는 배웠다여기, 데비안에는 .deb 패키지 바이너리에 대한 컴파일러 플래그 사용에 관한 공식 정책이 없습니다.

답변1

사용되는 컴파일러 플래그는 다음 함수입니다.

  • 문서 debian/rules,
  • 패키지의 빌드 파일(업스트림 작성자가 거기에 플래그를 지정할 수도 있으므로)
  • 사용된 빌드 시스템( dh등 ) cdbs,
  • 기본 컴파일러 설정.

사용된 플래그를 효과적으로 보려면 최소한 패키지를 컴파일해야 합니다.

debian/rules build

다음과 같은 것을 시도해보세요

debian/rules -n

일반적으로 아주 멀리 갈 수는 없습니다. 예를 들어 dh기반 패키지에서는 다음과 같이 말합니다.

dh build

또는 이와 유사한 것; dh이것이 무엇을 할 것인지 보여달라고 요청하는 것 (vs. --no-act)은 결과를 낳을 것입니다.

dh_testdir
dh_auto_configure
dh_auto_build

등.

빌드 플래그를 읽어서 결정하는 간단하고 설명하기 쉬운 방법은 없습니다 debian/rules. 거기에 설정된 플래그를 찾아보고 해당하는 경우 옵션 dpkg-buildflags(예: DEB_BUILD_MAINT_OPTIONS)을 실행하여 몇 가지 아이디어를 얻을 수 있습니다. 많은 패키지의 경우 어떤 플래그가 사용되는지 확인하는 가장 쉬운 방법은 아카이브에서 사용 가능한 패키지의 빌드 로그를 보는 것입니다.https://buildd.debian.org. 예를 들어coreutils다음에서 녹음됨i386-Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -fstack-protector-strong -Wformat -Werror=format-security컴파일과 -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wl,--as-needed -Wl,-z,relro링크 에 사용되는 플래그를 표시합니다 (감사합니다.파힘 미사후자를 지적하라! ).

관련 정보