본문 바로가기

awesome-c Beginner 번역/Building C Projects

<비공식 번역>awesome-c Beginner 번역 : 1. Configuration

현재위치


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'의 공식적인 번역이 아니며 수를 받은 것 역시 아닙니다!!




1: Configuration(1: 구성)


전통적으로 어떠한 빌드에서도 수행하는 첫 번째는 다양한 빌드의 부분을 위해 값을 고치는 것입니다. 빌드를 시작하기 전에 사람이 지정하여 필요한 모든 것을 포함합니다; 따라서 NetHack 3.4.3과 함께 구성은 매우 긴 시간을 소요합니다, 여러분은 "여러분의 시스템이 사용하는 터미널 코드 라이브러리는 무엇입니까?"라는 문제에 답해야 합니다. aimake는 이러한 고민을(this sort of question;문제의 종류를) 상당히 줄였습니다, 그것은 그 자체로 많은 것을 결정할 수 있기 때문입니다. 그러나 언제나 인간만이 답할 수 있는 "당신은 타일 포트(tiles port) 빌드에 관심이 있나요?" 또는 "당신은 프로그램을 홈 디렉토리 혹은 시스템 전체에 설치하길 원하시나요?" 같은 질문으로 진행됩니다. (적어도 aimake는 커맨드 라인 옵션까지 모든 선택의 대부분 응축하여 관리합니다. 하지만 지금 사용자 편의적 관점에서 커다한 한개의 문제를 가집니다. 특별히 지정한 옵션을 컴파일러 혹은 유사한 빌드 규칙에게 전달할 간단한 방법이 없는 것입니다; 여러분이 직접할 수 있지만 그 구문은 끔찍할 겁니다. aimake가 진정 생산을 목적으로 준비되기 전에 제가 작업할 필요한 무언가입니다.)


그러나 답이 실험적으로 결정될 수 있는 많은 문제가 있고, 컴퓨터는 사람보다 쉽게 문제에 답할 수 있습니다. 제공된 배포 tarball과 각 프로젝트를 위해 작성된 별도의 configure 프로그램과 함께, 이는 흔히 configure 라고 명명된 프로그램에 의해 수행됩니다(일반적으로, 항상은 아니지만, GNU가 제작한 autoconf ). configure의 작업은 하나하나 수행이 필요한 판단에 의해 시스템 간의 비휴대성을 종이 위에 적습니다.


저주가 일어난 것처럼, (제가 블로그 포스팅으로 휴대용 터미널 제어 코드를 썼던 것처럼) 하지만 configure는 점점 잘못된 문제를 해결해 나갑니다. 저는 가능한 많은 책에 의해 모든 일을 하는 GNU 자동툴 기반의 시스템을 작성했습니다, 그러나 이건 거의 농담 / 생각에 그치는 경우가 대부분 이었습니다; 현대 프로그램은 이에 대해 걱정할 필요가 없습니다. 말하자면 stdlib.h의 존재를 걱정할 필요가 없습니다 (그리고 그렇지 않은 경우에 대해 정말 확실한 해결법이 없습니다.) 적어도 autoconf의 문서는 그것을 특별히 검사하는 행동은 오늘날 사용되지 않으며 이것에서 멀어지는 것을 추천한다 라고 말하고 있습니다.


몇가지 유용한 검사가 있지만, 지금까지, 저는 실제로 NetHack4에서 이러한 종류의 두가지 검사가 필요했습니다 (그리고 aimake는 검사수행을 지원합니다.), 전체 빌드 시스템의 매우 작은 일부분 (그리고 자동화 도구, "표준" 빌드 순서의 3분의 1은 보증이 없습니다. configure, make, make install). 하나는 어떻게 컴파일러를 C11 모드로 설정하는 방법에 관한 것입니다 (--std=c11, -std=c11, 또는 아무것도 안 합니다 그리고 컴파일러를 비표준 준수 모드로 떨어뜨립니다. 이는 우리가 gccclang에서 사용하는 C11과 C99기능을 포함합니다.). 나머지 하나는 함수가 리턴되지 않음을 표시하는 방법입니다 : 그것은 _Noreturn (이 버젼은 C11에서 최신 표준), __declspec(noreturn) (마이크로소프트 컴파일러에 의해 사용된), 또는 __attribute__((noreturn)) (표준 구문이 발명되기 이전에 gcc와 clang에 의해 사용된) 인가요? 저는 원래 사전 정의된 매크로를 사용하는 컴파일러를 감지하려고 노력했습니다. 그러나 이것이 clang의 특정한 구 버젼에서 문제가 되었습니다 (오늘날도 Mac OS X시스템에서 여전히 사용되는). 이러한 검사들에서 제 현재 autoconf의 버젼에서는 존재하지 않았으며 이는 여기에 많은 도움이 되지 않았습니다.


대부분이 유저가 볼 수 있는 단계임을 주목하셔야하고 (대부분 수동작업이 필요하기 떄문입니다.) 또한 대부분 빌드 시스템간의 변화의 하나입니다. 따라서 여기에는 최적의 인터페이스가 필요하고 aimake가 여기에서 떨어지는 것은 심히 유감입니다.



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

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