나는 이것이 apt-get source <package_name>
당신에게 소스 패키지를 제공할 것이라는 것을 알고 있습니다. 여기에는 debian
이라는 파일이 포함된 폴더가 포함되어 있습니다 rules
. 내가 올바르게 이해했다면 이 파일에는 .deb
사용해야 하는 컴파일러 플래그를 포함하여 소스 패키지를 패키지 로 변환하는 방법이 설명되어 있습니다 .
두 가지 질문:
- 실제 컴파일러 플래그를 사용하려면 어떻게 해야 합니까? 가능하다면 이를 실행해야 합니까
make -n
? 아니면 문서를 구문 분석하여 어떻게든 얻을 수 있습니까? - 공식 저장소의 소스 패키지가 제공됩니다. 컴파일러 플래그는 파일에 의해 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
링크 에 사용되는 플래그를 표시합니다 (감사합니다.파힘 미사후자를 지적하라! ).