하고 싶은 프로젝트의 레퍼런스 프로젝트가 C언어로 되어 있어서 요즘 그것을 분석하기 위한 시간을 보내는 중이었다.
빨리 하고 싶어서 모르는 상태로 챗 gpt에 물어보고 나오는 명령어를 급하게 생각 없이 옮겨 쓰다보니... 문제가 더욱 커졌다. 이번 기회로 gpt에 대한 의존은 좋지 못하다는걸 몸으로 깨닫게 되었다. 오히려 ai를 현명하게 쓰지 못할 경우 시간 낭비가 더욱 발생하게 된다.
그럼 본론으로 들어가보려고 한다.
왜 Makefile과 make가 필요한가?
이 이슈에 대한걸 그대로 구글링을 해보았다.
https://www.includehelp.com/c-programming-questions/what-is-makefile.aspx
What is Makefile for c program compilation and how to create Makefile? - IncludeHelp
What is Makefile for C program compilation and How to create Makefile? Makefile in Linux for Compilation If you have multiple source files in c, c++ and others language and want to compile them from Terminal Command, it is hard to write every time. To solv
www.includehelp.com
이런 사이트를 찾을 수 있었다. 그 내용을 살펴보자.
C 프로그램 컴파일용 Makefile이란 무엇이며 Makefile을 만드는 방법은 무엇입니까?
컴파일을 위한 Linux의 Makefile
Makefile은 컴파일 프로세스를 단순화하거나 구성하는 데 사용되는 도구입니다. Makefile은 목적 파일을 만들고 제거하기 위한 변수 이름과 대상 명령어 집합으로 구성됩니다. 하나의 Makefile에서 여러 개의 대상을 만들어 이진 파일을 컴파일하고 제거할 수 있습니다. Makefile을 사용하여 프로젝트(프로그램)를 여러 번 컴파일할 수 있습니다.
c, c++ 등 여러 언어로 된 소스 파일이 여러 개 있고 이를 터미널 명령에서 컴파일하고 싶다면 매번 작성하기가 어렵습니다. 이러한 종류의 문제를 해결하기 위해 Makefile을 사용하는 이유는 대규모 프로젝트를 컴파일하는 동안 많은 수의 소스 파일을 작성해야 하고 링커 플래그가 필요하기 때문에 반복해서 작성하기가 쉽지 않습니다.
이 짧은 문장을 보고 든 생각을 정리해보았다.
1. C 프로그램 컴파일 이라함은 구체적으로 어떤 것을 의미하는가? 어떤 확장자를 해석해서 어디로 전달하고 무엇을 얻을 수 있는가?
2. Makefile 은 만들 수 있는 무언가다.
3. Makefile은 텍스트 기반 인터페이스에서 컴파일하는 과정에 도움을 주는 무엇인가다.
4. C 혹은 C++ 환경에서 사용된다.
5. "링커 플래그"는 무엇인가?
6. 많은 수의 소스 파일을 작성하는 수고를 덜어줄 수 있다.
여기서 C언어를 컴파일 하려면 어떻게 해야하는지를 잠시 언급하자면
GCC 혹은 G++ 등을 통해 C, C++ 파일을 컴파일하게 된다.
여기서 컴파일 하는 과정은 다음과 같다.
gcc 소스 파일 이름
이어서 밑의 설명을 보자.
Makefile 은 컴파일을 위해 코드를 단순화하거나 구성하는 도구입니다. Makefile 은 개체 파일을 만들고 제거하기 위한 변수 이름과 대상이 있는 명령 집합(터미널 명령과 유사)입니다. 단일 make 파일에서 우리는 바이너리 파일을 컴파일하고 제거하기 위해 여러 대상을 만들 수 있습니다. Makefile 을 사용하여 프로젝트(프로그램)를 여러 번 컴파일할 수 있습니다 .
예를 들어 이해해 보겠습니다. main.c (메인 소스 파일), misc.c (함수 정의를 포함하는 소스 파일), misc.h (함수 선언을 포함)
3개의 파일이 있다고 가정합니다 . 여기서 myFunc() 라는 함수를 선언하고 정의하여 무언가를 인쇄합니다. 이 함수는 각각 misc.c 와 misc.h 에서 정의되고 선언됩니다 .
myFunc() 는
misc.h(헤더 파일)에서 선언되었고
misc.c(소스 파일)에서 정의되었습니다.
main.c 에서는 사용됩니다.
이러한 파일들을 컴파일하려면 명령어를 계속해서 입력해주어야 합니다. 아때 Makefile을 사용하면 자동으로 명령어를 실행하여 컴파일을 수행합니다. Makefile을 사용하면 프로그램을 여러번 컴파일해야할 때 일일이 명령어를 입력하는 수고를 덜 수 있습니다.
Makefile을 하게 되면 object 파일들을 링크해서 실행 파일을 만들게 됩니다.
더 자세한 내용은 후속편에서 다루도록 하겠습니다.
'코딩이야기 > C' 카테고리의 다른 글
[C] c언어 학습일지, C언어에서 각 파일 간의 의존성을 체크하는 방법 (0) | 2023.03.17 |
---|