이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 2340|회답: 1

GCC, CMake, CMakelist, Make, Makefile, Ninja 소개

[링크 복사]
게시됨 2024. 7. 9. 오후 8:44:28 | | |
1. GCC의 탄생!

1985년, 손가락이 보이지 않는 어두운 밤, 수염이 있고 키가 작으며 머리가 헝클어진 이상한 남자가 C 언어 컴파일러 세트를 작성하기 시작했다. 이 괴짜 인물은 나중에 '최고의 프로그래머'이자 '자유 소프트웨어의 아버지'로 알려지게 된 리처드 스톨먼이었습니다. 2년간의 노력 끝에, 수염이 길고 머리가 더 흐트러진 리처드 스톨먼은 GNU C 컴파일러라 부르는 첫 번째 C 컴파일러를 완성했으며, 이는 현재 유명한 GCC의 소스가 되었습니다. 이후 GCC는 빠르게 발전하여 이제 C++, Fortran, Pascal, Objective-C, Java, Ada 등 다양한 언어도 컴파일할 수 있게 되었습니다. 지난 세기 80년대와 90년대에는 개인용 컴퓨터의 CPU 주파수, 하드 디스크 크기, 메모리 크기가 모두 MB 또는 KB 단위로 측정되었고, 컴파일해야 할 프로그램 파일 수는 적었으며, GCC 명령어만으로도 충분했습니다.

둘째, 새로운 문제들이 생겼다! (메이크 & 메이크파일)

컴퓨터 성능이 향상되고 대중화됨에 따라, 소프트웨어 프로젝트에는 리눅스와 같은 소스 파일이 점점 더 많이 포함되어 있는데, 이는 쉽게 혼란스럽고 작업부하가 많아 사람들을 미치게 만듭니다.

리처드 스톨먼과 롤랜드 맥그래스는 이 문제를 해결하기 위해 메이크와 메이크파일을 공동 개발했습니다. make 도구는 컴파일 및 링크 기능이 없지만, 사용자가 makefile 파일에서 지정한 명령을 호출하는 배치 처리와 유사한 방식을 사용하는 지능형 배치 처리 도구로 볼 수 있습니다. 메이크파일이 무엇인가요? 메이크파일은 단순히 노래의 악보와 같은 스크립트 파일이며, 메이크 도구는 지휘자와 같고, 지휘자는 전체 오케스트라를 악보에 따라 연주하도록 지시하며, 메이크 파일은 메이크파일의 명령에 따라 컴파일되고 연결됩니다. makefile 명령어는 gcc(또는 다른 컴파일러)를 호출해 소스 파일을 컴파일하는 명령어를 포함합니다.

3. 또 새로운 문제가 생겼다! (Cmake & CMakelist)

간단한 프로젝트에서는 메이크파일을 손으로 작성할 수 있지만, 프로젝트가 매우 클 때는 손으로 작성하는 것도 매우 번거롭습니다. 그리고 GNU make, QT의 qmake, Microsoft의 MSnmake, BSD Make(pmake), Makepp 등 다양한 플랫폼용 makefile이 연이어 등장했습니다. 이 Make 도구들은 서로 다른 사양과 표준을 따르며, 지원하는 Makefile 형식도 매우 다양합니다. 이것은 심각한 문제를 야기합니다: 소프트웨어가 크로스 플랫폼이 되려면 서로 다른 플랫폼에서 컴파일할 수 있어야 합니다. 위의 Make 도구를 사용하면 각 표준별로 makefile을 작성해야 하는데, 이는 매우 번거로운 작업입니다. 플랫폼을 변경하면 다시 수정해야 합니다.

이때 Cmake라는 도구가 등장했고, Cmake는 위 만든 파일을 더 쉽게 생성할 수 있습니다. 물론 cmake에는 다른 기능도 있는데, 즉 해당 플랫폼에서 여러 플랫폼에서 사용할 수 있는 make파일을 생성할 수 있고, 직접 수정할 필요가 없습니다. cmake는 Makefile의 상위 계층이며, 그 목적은 휴대용 make파일을 만들고 혼자 만드는 막대한 작업량을 단순화하는 것입니다. 그런데 cmake는 메이크파일을 생성하는 데 무엇을 사용할까요? 또한 CMakeLists.txt 파일(학명: 구성 파일)이라는 파일을 기반으로 메이크파일을 생성해야 합니다. 결국 CMakeLists.txt 누가 문서를 작성할까요? 물론, 직접 썼잖아.

넷째, 새로운 문제들이 다시 나타났습니다! (닌자)

소프트웨어 엔지니어링이 더 크고 복잡해지면서 제조 실행 속도 저하 문제는 점점 더 심각해지고 있습니다.

그 결과, 구글 프로그래머가 속도에 중점을 둔 빌드 도구인 닌자를 출시했습니다. 닌자는 모든 고급 기능을 갖추고 있지 않고, 문법과 사용법이 매우 단순하며, 무엇을 해야 할지 상세히 명시되어 있어서 컴파일이 매우 빠르게 시작됩니다. 실제 테스트에 따르면, 3만 개가 넘는 소스 파일을 보유한 경우 실제 빌드를 1초 만에 시작할 수도 있습니다. 반면, 선임 엔지니어가 작성한 메이크파일은 구축을 시작하는 데 10-20초 정도 걸립니다.

5. 지금까지 완벽한 결말!

Cmake는 .ninja와 .makefile 도구를 생성할 수 있습니다. 많은 사람들이 makefile 파일과 ninja 파일을 작성하는 방법에 익숙하지 않기 때문에, cmake는 소스 코드 파일(즉, CMakeLists.txt 파일)에 대한 간단한 설명만 있으면 자동으로 프로젝트 makefile 파일이나 ninja 파일을 생성하고, ninja나 make를 통해 컴파일을 시작할 수 있습니다.


make/makefile/cmake/nmake 이해를 위해 5분

최근에 메이크, 크메이크, 메이크파일에 의해 만들어졌나요... ... 이런 것들은 어지러울 수 있습니다. 다음 글을 참고하세요. 아마도 명확히 이해할 수 있을 것입니다.

1. GCC
이는 GNU 컴파일러 컬렉션, 즉 단순히 컴파일러로, C, C++, Objective-C, Fortran, Java 등 다양한 프로그래밍 언어를 컴파일할 수 있습니다.

우리 프로그램이 소스 파일이 하나뿐일 때는 gcc 명령어로 직접 컴파일할 수 있습니다.

하지만 만약 우리 프로그램이 많은 소스 파일을 포함하고 있다면 어떻게 될까요? gcc 명령어를 하나씩 컴파일할 때 혼란스럽고 작업이 많이 걸리기 때문에 다음 만들기 도구가 등장합니다.

2. 만들었다
make 도구는 컴파일 및 링크 기능이 없지만, 사용자가 makefile 파일에서 지정한 명령을 호출하는 배치 처리와 유사한 방식을 사용하는 지능형 배치 처리 도구로 볼 수 있습니다.

3. 메이크파일
이것은 뭐예요?

간단히 말해, 노래의 악보처럼 Make 도구는 지휘자와 같아서, 지휘자가 오케스트라 전체를 악보에 따라 연주하도록 지시하고, Make 도구는 makefile의 명령에 따라 컴파일되고 연결됩니다. makefile 명령어는 gcc(또는 다른 컴파일러)를 호출해 소스 파일을 컴파일하는 명령어를 포함합니다.

간단한 프로젝트에서는 메이크파일을 수동으로 가져갈 수 있지만, 프로젝트가 매우 클 때는 손으로 쓴 메이크파일도 매우 번거롭습니다.

4. cmake
cmake는 위에 언급한 Make의 메이크파일 파일을 쉽게 생성할 수 있습니다. 물론 cmake는 더 나은 기능도 있는데, 즉 해당 플랫폼에서 사용할 수 있는 메이크파일을 생성할 수 있어 우리가 직접 수정할 필요가 없습니다.

그런데 cmake는 메이크파일을 생성하는 데 무엇을 사용할까요? 또한 CMakeLists.txt 파일(학명: 구성 파일)이라는 파일을 기반으로 메이크파일을 생성해야 합니다.

5. CMakeList.txt
결국 CMakeLists.txt 누가 문서를 작성할까요? 여보, 네 손으로 쓴 거야.

6. nmake
nmake가 뭐야?

nmake는 Microsoft Visual Studio의 사이드 명령어로, VS를 설치해야 하는데, 사실 리눅스의 Make와 동등하다고 할 수 있어요, 이해하시겠죠?

전근 출처:

하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.





이전의:ERP 킹디 클라우드 스타리스 스카이 (1) 간단한 이해
다음:Rocky Linux 9 패키지를 찾지 못함: 논쟁 대상 일치 없음: xxx
 집주인| 게시됨 2024. 12. 8. 오전 8:57:06 |
MinGW는 Windows용 간단하고 편리한 GCC 기반 프로그램 개발 환경을 제공합니다. MinGW는 무료 Windows 사용 헤더 및 라이브러리 파일 모음을 수집합니다; 또한 GNU (http://www.gnu.org/) 도구들, 특히 클래식 gcc, g++, make 등과 같은 GNU 개발 도구들입니다. MinGW는 완전히 자유 소프트웨어로, Windows 플랫폼에서 Linux에서 GCC 개발 환경을 시뮬레이션하여 C++의 크로스 플랫폼 개발에 대한 기본적인 지원을 잘 제공하고, Windows에서 프로그래머가 Linux에서 C++ 엔지니어링 조직에 익숙해질 수 있는 조건을 제공합니다.
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com