CentOS 6 배포의 경우 Makefile.patch
다음 버전을 검토하고 있습니다.
- @echo 'libdir=$${prefix}/lib' >> tap.pc
+ @echo 'libdir=$${prefix}/lib64' >> tap.pc
내 질문은 이것이 어떻게 수행되는지입니다. CentOS에서 64/비트 및 32/비트 설치에 대한 모든 make 파일을 다시 작성하는 것이 정상입니까? make가 이를 처리하고 하드코딩하지 않고 64비트 아키텍처용으로만 빌드할 수 있는 방법이 있습니까?
나중에 makefile에서 설치를 하드코딩하는 규칙을 계속하는 것을 볼 수 있습니다 lib64
.
+ mkdir -p $(PREFIX)/lib64 $(PREFIX)/include $(PREFIX)/lib64/pkgconfig
+ install -c libtap.a $(PREFIX)/lib64
+ install -c libtap.so $(PREFIX)/lib64
+ install -c tap.pc $(PREFIX)/lib64/pkgconfig
답변1
foo.pc.in
당신이 설명하는 것은 당신이 만든 라이브러리가 그런 것과 함께 제공되지 않는 경우 갈 방법 중 하나입니다.
규칙은 Makefile
(또는 빌드 시스템이) 환경 변수를 통해 라이브러리 디렉터리 구성을 허용하는 경우 해당 환경 변수가 사용된다는 것입니다.
따라서 첫 번째 단계는 특정 콘텐츠에 Makefile
유사한 콘텐츠가 있는지 확인하는 것입니다. 예를 들어이 예다음을 사용하여 동일한 사양 파일을 기반으로 하는 multilib 빌드(예: x64_64 및 i686)를 허용합니다.
%make_install PREFIX=%{_prefix} INSTALL_LIB=%{buildroot}%{_libdir}
이 경우 패치가 필요하지 않습니다.
cmake 기반 프로젝트는 다음과 같이 올바른 라이브러리 디렉터리에 대한 정보를 받을 수 있습니다.
%cmake .. -DCMAKE_INSTALL_PREFIX="%{_prefix}" \
-DCMAKE_INSTALL_LIBDIR="%{_libdir}"
따라서 최후의 수단으로 Makefile
라이브러리 디렉토리에 대한 사용자 정의가 허용되지 않는 경우 패치를 수행합니다.
그러나 그러한 패치를 만드는 것은 지루할 수 있습니다. 따라서 sed
해당 %prep
부분에 대한 작업을 수행할 수 있습니다.