본문 바로가기

awesome-c Beginner 번역/Building C Projects

<비공식 번역>awesome-c Beginner 번역 : Preface

번역자의 첨언

awesome-c의 Beginner 과정에는 각 항목마다 다른분들의 내용이 링크된거 같습니다. 그래서 이전에 했던 A tutorial on pointers는 항목이 자세히 나뉘어져 있었지만 Building C Project는 하나의 문서이기 때문에 제가 직접 구분을 넣어서 글을 분리하겠습니다.


현재위치


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




Preface(서문)

C는 컴파일된 언어입니다. C프로그램을 사용하기 위해 실행가능하도록 변환이 필요합니다. 일반적으로, 프로그래머는 수동으로 필요한 명령을 실행시키는 것보다 빌드 시스템 일종으로 이 작업을 수행합니다. 왜냐하면 거대한 프로젝트의 컴파일 과정은 아주 복잡한 경향이 있기 때문입니다.


NetHack의 빌드 시스템은 더 자주 변형되고 교체되는 코드의 부분 중 하나입니다. 이 문제는 NetHack 3.4.3의 빌드 시스템이 제대로 동작하기위해서 사용자에게 수동 작업을 요구합니다. 요즘(글작성 당시 2014년)은 거의 일어나지 않는 일이죠. 그러나 빌드 시스템을 수정하는 일반적인 방법은(예를들어 UnNetKack  또는 AceHack에서 autoconf 혹은 NitroHack에서 cmake) 외부의 추상레이어를 추가하는 것입니다. 그리고 C 빌드에 대한 세계의 저조한 표준화에서, 일반적으로 발생하는 일은 이 계층들이 각각 아래계층으로 호환성과 비표준 문제를 해결하려 노력합니다. 대부분의 해결법이 작업영역에 복잡한 stack을 가지고 있음을 의미합니다.


또 다른 문제는 대부분의 사람들의 인식보다 C 프로그램의 빌드하는 단계에는 더 많은 단계가 있는 것입니다. 몇몇 단계는 빌드 시스템이 처리해주지만 그 외의 일반적인 단계는 프로그래머나 유저가 직접 수행합니다. 그런데 이건 정말 많은사람들의 시간을 낭비합니다. 빌드 과정의 대다수는 자동으로 처리할 수 있습니다. 컴퓨터의 시간은 인간의 시간보다 가치가 덜하기 때문입니다(어찌됐든 컴퓨터는 인간보다 엄청빠르죠).


NetHack 4의 경우, 저는 가능한 많이 추상화의 레벨을 평평하게 하는 것을 목표로 했습니다. 저조하게 표준화된 기존 도구의 또다른 wrapper 대신에 저는 원래 NetHack 4에서 원래 썼던 빌드시스템인 aimake를 사용합니다(하지만 특정하진 않습니다). aimake는 여전히 약간 미완성이지만 - 이것은 버그, 누락된 기능, 인터페이스 문제가 알려져 있습니다 - NetHack 4를 빌드하기 위해 매우 효과적입니다. 그리고 배포판(release)가 준비됐을 때, 언젠가 더 광범위하게 사용하게 될 것으로 희망합니다.


aimake와 기존 빌드 도구는 2가지의 큰 차이점이 있습니다. 첫 번째로 aimake는 낮은 수준의 빌드도구의 의존성 회피를 목표로합니다. 대부분의 빌드 시스템은 다른 빌드 시스템의 입력으로서 작용하여 출력을 생성함으로써 작동합니다. 그리고 실제 코드를 빌드하기 이전에 여러 계층으로 갈 수 있습니다(예를 들어 GNU Autotools, Makefile.amMakefile.in의 소스이고 Makefile.in은 실제로 코드를 구축하기 위한 지침이 포함되어 있는 Makefile의 소스입니다). 두 번째는 대부분의 빌드 시스템에서 사람이 직접 다루어야하는 단계를 aimake는 보다 더 자동화하였습니다.


그러나 이 방법의 문제중 하나는 이해의 차이로 이어질 수 있다는 것입니다. 빌드 시스템으로 작업하는 대부분의 사람들은 실제로 그들의 작업을 스스로 빌드하는 것보다 단지 기존 도구에 적응하려 노력합니다. 이 점은 상대적으로 추상화의 레벨에 친숙하지 않게 동작하는 aimake를 정말 이해하기 어렵게 만들 수 있습니다. 따라서 저는 이 블로그 포스팅을 통해 여러분이 C 프로그램을 빌드할 때 어떤일이 실제로 일어나는 지를 설명하고자 합니다. 책임의 한계 : 이 포스팅은 애매한 시스템을 포함하기 보다는 일반적으로 현대 소비자의 운영체제에서 작동하는 것에 초점을 두고 있습니다(특히 리눅스와 윈도우). C는 이것 처럼 일할 필요가 없습니다. 오직 대체적으로 연습입니다.


보통, 빌드의 첫 번째 단계에서 시작하고 그곳에서 앞으로 이동할 것입니다. 그러나 C를 빌드하는 과정에서 순서는 실제로 매우 혼란스럽습니다. 진행할 단계의 다수는 앞으로의 단계에서 필요한 준비 과정이고 이것이 왜 필요한지에 대한 설명없이는 다음 단계를 풀이해 나가기가 어렵습니다. 따라서 나는 중간에서 시작해서 그곳부터 앞,뒤로 나아갈 것입니다. 설명에 들어가기 앞서 순서를 나열해 드리겠습니다. (이 순서는 고정적이지 않지만 사용되는 합리적인 논리의 하나입니다.)


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


대부분의 빌드 시스템은 3, 5,단계에서 7,9 그리고 10단계를 다룹니다. (남겨진 단계들은 빌드가 이루어지기 전이나 후에 수동으로 작업해야 합니다.) aimake는 현재 1에서 11단계까지 다루고 12단계를 시작합니다. 13단계는 거의 항상 운영체제에 의해 다뤄집니다.


이제 이 포스팅의 주요 내용인 빌드 그 자체에 대해 설명하겠습니다.



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

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