본문 바로가기

awesome-c Beginner 번역/Building C Projects

<비공식 번역>awesome-c Beginner번역: 12. Package generation

1. Configuration

2. Standard directory dectection

3. Source file dependency calculation

4. Header file location

5. Header precompileation

6. Preprocessing

7. Compliation and assembly

8. Object file dependency calculation

9. Linking

10. Installation

11. Resource linking

12. Package generation

13. Dynamic linking

<주의!!>

nethack4.org의 'Building C Projects'의 공식적인 번역이 아니며 수를 받은 것 역시 아닙니다!!





12 : Package generation ( 12 : 패키지 생성 )


지금까지, 우리는 개발자의 시점에서 빌드와 설치과정에 초점을 맞춰왔습니다. 그러나 tar압축으로 소스를 배포하고 유저에게 이것을 빌드하도록 말하는 것은 오늘날에는 사용자 친화적이지 못한 배포방법입니다. 리눅스에서 기술적인 면을 배우지 않은 유저들은 그들의 배포 패키지 매니저로 다룰 수 있는 패키지를 원합니다.  윈도우에서, 대부분의 유저들은 그들이 더블클릭 할 수 있는 설치파일을 원할 것입니다. (게다가, 소프트웨어 패키지라면 가지고 있는, 이전단계에 대한 특정한 uninstaller 지원이 없고, 이 섹션에서 설명하는 최종 사용자 설치 프레임워크의 종류는 일반적으로 uninstaller를 잘 제공합니다.)


이번 단계는 본질적으로 시스템 별로 다르게 됩니다; 예를 들어, 윈도우즈의 installer는 (Debian 장비의)dpkg와 많은 차이가 있습니다. 그러나 어떤 부분은 같습니다. 가장 주목할만한 점은 이러한 설치도구에 입력되는 것은 설치될 파일의 계층이라는 것 입니다; DESTDIR 관습은 이 단계에서 매우 유용합니다. ( 패키지 생성 도구는 파일에 대해 권한요청을 필요로 합니다, 그러나 이상적으로 관리자 권한은 DESTDIR 설치를 위하여 필요하진 않을 것입니다; 리눅스에서, 이 문제를 해결하는 방법은 프로그램이 권한 설정 시도를 가로채고 파일이 "가져야만" 하는 권한을 기억하는 fakeroot를 호출하는 것입니다.  그리고 윈도우에서 aimake는 파일들과 그들에게 필요한 권한 리스트를 만들 것입니다. 그리고 패키지 생성 도구에게 별도로 전달합니다.


현재, 윈도우즈에서 installer 생성을 위한 aimake의 지원은 거의 완전합니다; 이것은 빌드 프로세스가 편해질 수 있는 WiX 입력파일을 사용하면 생성할 수 있습니다. 사용자가 수동으로 동작하는 것보다 자동으로 수행하는 것이 더 쉬워야 함에도 WiX를 실행하는 유일한 방법입니다. (한가지 문제는 윈도우 인스톨러는 작업하는 데에 몇가지 디자인 이슈가 있고, 이를 해결할 추천 방법 중에 일부는 말도 안 됩니다; 결국, 저는 이것을 사용하려는 노력을 그만두고, 대신에 실질적으로 이론적으로 잘 동작하는 더 나은 방법을 찾도록 했습니다, 그러나 지금의 빌드 프로세스는 권장방법을 사용하지 않는 저 때문에 warning과 error를 띄웁니다.) (재밌게도, error와 수많은 warning은 방금 언급했었던 작업방법에 의한 디자인 이슈에 의해 생긴 오탐지 입니다.  윈도우즈 인스톨러의 consistency 체커가 발생한 "error"는 정말 그저 warning이고, 이점은 꺼둘 수 있습니다.)


리눅스에서 상황은 조금 더 복잡합니다. 지금까지 저는 (가장 폭넓은 패키지 포멧을 사용할 수 있는)데비안에 초점을 맞춰왔습니다. 데비안의 정책은 패키지 중 데비안위해 개발된 것이거나 데비안에 대한 지식이 없이 개발되어 개별적인 패키징 되었더라도 기록됩니다. "그 자체로도 존재하지만 데비안에서 패키지를 배포하는 방법을 아는" 경우는 적절한 소스 패키지 동작을 매우 어렵게 만듭니다(바이너리 패키지는 훨씬 쉽습니다). 현재 aimakedpkg-buildpackage에 의해 실행되는 모든 적당한 옵션을 가지고 있습니다. 이는 dpkg-buildpackage가 어떻게 aimake가 실행되길 원하는지를 알기위해 짧은 wrapper 스크립트가 필요합니다(아마도 20여개의 대부분의 패키지의 NetHack 4에서 31줄 정도). (WiX와 무슨 작업을 하였든) 데비안의 메타데이터 대부분은 aimake를 사용하는 모든 프로그램에 대해 동일해야 합니다. 그래서 결국 나는 aimake가 데비안 패키지 생성을 모두 자동으로 처리하는 옵션을 가지길 희망합니다. 이는 aimake가 그 자신을 실행하기 위해 dpkg-buildpackage를 실행하는 이상한 상황으로 이끌게 되지만, 이 방법은 빌드가 재현할 수 있는 기회(가능성)을 극대화할 방법입니다.



출처1 : https://github.com/aleksandar-todorovic/awesome-c

출처2 : http://nethack4.org/blog/building-c.html