리눅스 환경에서 빌드 툴을 사용하는 방법

개발 테크
2024. 03. 29
조회수
4,167
리눅스

GNU 프로젝트에서는 Bash 쉘뿐만 아니라 c 프로그래밍 환경을 위한 다양한 프로그램들이 개발되었습니다. 그중 하나인 리눅스의 GNU 컴파일러 GCC는 gcc 명령어를 통해 프로그램에 필요한 소스코드를 커맨드 라인에 명시하여 사용할 수 있지만 대규모 프로젝트에서는 gcc 명령어만으로 소스 파일의 의존 관계를 하나씩 모두 정의해 주기 너무 힘듭니다. 

그래서 많은 프로그램들은 이를 미리 CMakeLists.txt라고 불리는 파일에 정의하고 cmake와 make 명령어를 사용하여 빌드할 수 있도록 합니다. 이 프로세스를 통해 다양한 플랫폼에서 컴파일을 진행할 수 있어 프로젝트의 이식성을 높여주고 빌드 시스템을 위한 자동화된 테스트, 패키지 생성 등 복잡한 과정을 쉽게 관리할 수 있습니다

이 일련의 과정을 수행하실 수 있도록 gcc, make, cmake 명령어에 대해 소개하고 프로그램을 좀 더 편하게 컴파일할 수 있는 방법을 대한민국 No.1 IT 인재 매칭 플랫폼 이랜서에서 알려드리겠습니다.


 

리눅스(Linux)란?

리눅스-마스터

리눅스는 리누스 토르발스에 의해 오픈소스로 개발된 운영체제입니다. Unix 운영 체제에서 영향을 받아 Unix와 유사한 명령어와 파일 시스템을 사용하며, 다중 사용자 및 다중 작업 환경을 지원합니다.

우리나라에서 사용하는 리눅스는 정확히는 ‘GNU/LINUX(리눅스)’리눅스 커널을 사용하는 GNU 운영체제로  소스 코드 공개 및 수정이 자유롭고 커뮤니티가 활발하기 때문에 개발자들에게 인기가 높은데요.

GNU/LINIX 운영체제에서 컴파일을 할 때 빠르고 편하게 할 수 있는 gcc, make, cmake 명령어에 대해 알려드리겠습니다.


 

프로젝트 빌드 및 실행

GCC‘컴파일러’로 사람이 읽을 수 있는 소스 코드를 기계 코드, 바이트 코드 또는 다른 프로그래밍 언어로 변환하는 프로그램입니다. 소스 코드가 실행 파일로 변환되기까지 4가지 단계를 거치게 되며, 이 과정을 GCC가 수행할 수 있도록 명령어를 전달해야 합니다.

리눅스-버전-확인

gcc의 옵션을 사용하여 출력될 파일의 이름과 형태를 지정할 수 있고 헤더 파일을 정의하거나 미리 컴파일된 라이브러리를 링킹할 수 있습니다. 

리눅스-파일-찾기

많은 오픈 소스 기반 프로그램들은 개발자가 직접 작성해놓은 CMakeLists.txt를 사용해서 빌드 할 수 있도록 하기 때문에 리눅스를 익히 사용하였으나 직접 gcc 명령어를 사용하여 컴파일해 본 적은 없는 분들도 계실 것입니다. 

하지만 gcc를 잘 알고 있어야 직접적인 컴파일이 가능하기 때문에 최적화, 운영체제 간의 호환성, 디버깅 면에서 이를 이해하는 것은 리눅스 소프트웨어 개발의 가장 기본적인 부분입니다.

그 옵션들을 다 설명드리고 싶지만 이 글에서는 빌드 툴 사용을 중점적으로 다룰 것이므로 이 부분은 넘어가도록 하겠습니다. 자세한 사항은 https://gcc.gnu.org/ 을 참고하시길 바랍니다.


 

Makefile을 사용한 빌드 과정 자동화 

make는 소스 파일들간의 의존성을 관리하고 변경된 파일만 다시 컴파일하여 효율적으로 빌드할 수 있는 툴입니다. 프로젝트의 일부 소스 파일만 수정되었을 때 전체 프로젝트를 다시 빌드하는 것을 방지하여 시간을 절약할 수 있으며 프로젝트의 빌드, 테스트, 패키징 등 다양한 작업을 관리할 수 있습니다. 
 

여러 파일로 구성된 프로젝트의 빌드

함수들을 라이브러리로 만들어서 미리 컴파일해놓으면 코드 재사용을 통해 개발 시간을 단축시킬 수 있을 뿐만 아니라 생성하고자 하는 프로그램에 링킹만 하면 사용할 수 있어빠르게 컴파일할 수 있습니다. 

이러한 빌드 방법을 설명하기 위해 간단한 나눗셈 프로그램을 divide.h, divide.c, main.c 세 개의 소스 파일로 헤더 파일과 소스 파일을 분리하여 구현하는 상황을 가정하겠습니다. 프로그램의 의존 관계는 아래 그림과 같을 것입니다.

리눅스-마스터-1급

리눅스-find

프로그램에 필요한 c 파일들을 함께 컴파일하여 main이라는 실행 파일을 만들 수 있습니다. 위에서 사용한 1줄의 gcc 커맨드 라인은 간단해보일 수 있지만 소스 코드가 100개가 넘어가는 프로젝트에서 컴파일할 때마다 명령어를 하나하나 친다면 어마무시한 시간과 실수를 동반하게 될 것입니다.

물론 쉘 스크립트에 모두 작성해두고 다음번에도 사용할 수 있습니다. 하지만 대규모 프로그램은 헤더, 소스파일, 오브젝트 파일, 실행파일의 모든 의존관계를 파악하고 체계적으로 관리하는 것이 필요합니다. 프로젝트 관리 및 유지보수면에서 이 방법은 너무 비효율적입니다.
 

 

Makefile 작성법

make는 미리 정의된 명령을 순차적으로 자동 실행하여 복잡한 빌드 과정을 쉽게 처리할 수 있을 뿐만 아니라 의존 관계를 정의하고 관리함으로써 이러한 프로세스를 보다 체계적이고 효율적으로 진행할 수 있어 소프트웨어 개발에서 중요한 도구로서 대부분의 프로젝트에서 사용되고 있습니다. 

make를 작동시키기 위해선 먼저 Makefile을 작성해야 합니다. 구조는 다음과 같습니다. target은 컴파일하려는 프로그램의 이름, dependency는 각 target이 의존하는 소스 코드 파일의 목록, command는 파일을 컴파일하고 링크하는 명령어입니다.

리눅스-용량-확인

프로젝트의 의존관계를 Makefile에 명시해 주도록 하겠습니다. Makefile에는 사용자 정의 / 사용자 정의 매크로가 존재하고 자동으로 의존 관계를 생성하는 유틸리티가 있기 때문에 가시성 있고 관리하게 쉽습니다.

 

  • Makefile

리눅스-파일-삭제

main 프로그램을 만들기 위해 필요한 파일들과 명령을 정리해주었습니다. gccmakedep이 각 소스 파일의 의존성을 자동으로 파악하여 어떤 파일을 컴파일해야할지 나열해주기 때문에 빌드 과정을 더 효율적으로 관리할 수 있습니다.
 

 

make를 통한 실행파일 생성

Makefile에 필요한 정보를 모두 작성하였으니 make 명령어를 통해 프로젝트를 빌드할 수 있습니다.

리눅스-설치

option에 main처럼 빌드하고 싶은 타겟을 지정해주거나 make clean을 통해 컴파일 과정에서 만들어진 파일을 모두 삭제할 수 있습니다. 
 

 

 

CMakeLists.txt 작성하여 Makefile 생성하기 

cmake소프트웨어를 빌드, 테스트 및 패키징 할 수 있도록 설계된 오픈 소스 크로스 플랫폼 도구로, 다양한 운영체제에서 작동할 수 있도록 합니다. cmake를 사용하면 CMakeList라고 불리는 설정 파일을 사용하여 컴파일 프로세스를 제어할 수 있습니다. 

설정 파일에 정의된 빌드 타겟 간의 의존성을 자동으로 처리하며, 필요한 경우 해당 의존성을 먼저 빌드 해주기 때문에 make보다 의존 관계를 더 쉽게 추상화할 수 있습니다. 또한 각 플랫폼에 대해 별도로 파일을 작성하지 않고 하나의 설정 파일에서 관리할 수 있어 프로젝트 관리 및 확장성 면에서 큰 이점을 가집니다. 

이러한 시스템은 프로젝트의 복잡성이 증가함에 따라 필요한 의존성을 자동으로 관리하고, 플랫폼 간 일관된 빌드 환경을 유지할 수 있어 개발자가 빌드 프로세스에 대해 더 적게 신경 쓰고, 코드 작성에 집중할 수 있도록 도와줍니다.

임의의 조합으로 빌드 환경을 생성하는데 유용하고 간단한 텍스트 파일로 프로젝트 구성을 관리할 수 있어 많은 오픈 소스들이 CMakeLists.txt를 포함하여 배포됩니다. 

리눅스에서 프로그램을 빌드 하여 설치해 본 경험이 있는 분들이라면 cmake .. && make -j4 라는 명령어를 분명 보신 적이 있을 것입니다. cmake 명령어를 사용하면 CMakeLists.txt의 내용을 기반으로 Makefile이 만들어져서 이를 사용하여 빌드 하게 됩니다.

리눅스-ls


 

CMakeLists.txt 작성법

make를 위해 Makefile을 작성했듯 cmake를 사용하기 위해서는 CMakeLists.txt를 작성해야 합니다. 

 

  • CMakeLists.txt

리눅스-파일-복사

작성방법은 직관적으로 이해할 수 있는 것들이라 아래 표에 설명해두었습니다. Makefile에서 타겟:의존 관계를 명시하는 구조와 유사한 형태이죠. 

현재 프로젝트는 ADD_EXECUTABLE()만으로도 충분히 컴파일이 가능하나, 앞으로 프로젝트 확장성을 생각한다면 변수를 추가하고 직접 컨트롤해야 하는 부분을 최대한 감소시키는 것이 효율적입니다.

리눅스-포트-확인


 

cmake를 통해 Makefile 생성

cmake 명령어를 사용하게 되면 빌드 결과물과 캐시 파일 등이 생성되기 때문에 별도의 build 폴더를 생성 후에 그 안에서 진행하는 것이 좋습니다. 아래 명령어를 사용하면 build 폴더 내에 Makefile과 실행 파일이 만들어지게 됩니다.

lunix

-j는 동시에 실행할 작업 수를 지정하는 옵션으로, 컴퓨터의 코어 수와 유사하게 설정하면 빌드 속도를 높일 수 있습니다. 컴파일 시간을 단축하기에 유용하나 리소스를 과도하게 사용할 수도 있으니 유의하여 사용해야 합니다.

리눅스 상에서 gcc, make, cmake를 활용하여 빌드 하는 방법을 설명하였습니다. 각각의 명령어는 하나씩 소개해도 분량이 모자랄 만큼 옵션이 많고 활용방법이 다양하지만 꼭 알아야 하고 자주 사용되는 기능들을 정리했습니다. 리눅스에서 프로그램을 제작하거나 오픈 소스를 직접 빌드할 때 이 글을 참고하면 큰 도움이 될 것입니다.


 

리눅스 환경에서 빌드 툴을 사용하는 방법, 잘 보셨나요? 

무료 오픈 소스로 제공되어 다양한 곳에 사용되며 구조 안전성과 우수한 보완성으로 서버 관리에 탁월한 성능을 보이는 리눅스, 전문성과 이해 깊이에 따라 다양하게 활용되는 리눅스는 기업의 서비스 품질 향상과 인프라 구축에 크게 기여할 수 있습니다. 

만약 서비스 품질을 향상시키고 서버를 효과적으로 관리할 수 있는 리눅스 전문가를 찾으신다면, 대한민국 No.1 IT 인재 매칭 플랫폼 이랜서에 회원 가입하고 프로젝트를 등록해 보세요. 데이터로 전문성과 인성(협업 능력) 모두 검증된 ‘리눅스 전문가’를 매칭해 드립니다!

 


24년의 노하우와 데이터로 

검증된 리눅스 전문가 매칭을 원하신다면?

 

대한민국 No.1 IT 인재 매칭 플랫폼 이랜서

linux-fund

이랜서는 기업의 프로젝트에 가장 적합한 IT 전문가를 데이터로 검증해 매칭하는 대한민국 No.1 IT 인재 매칭 플랫폼입니다. 

서버와 인프라 구축을 위한 리눅스 전문가부터 자바, 자바 스크립트, TypeScript, NestJS, Node js 등 백엔드 전문가와 프론트엔드 개발을 위한 React, Vue, Kotlin, 앵귤러 전문가, .Net, Flutter, React Native 등의 크로스 플랫폼 전문가, SQL(오라클, MySQL, MS SQL 등), DA, DBA, ETL  등 데이터를 추출하고 활용하는 데이터 전문가, 서비스 기획자, PO, PM, Jira 전문가 등 약 40만 명의 IT 전문가가 파트너십으로 등록되어 있습니다.



 

24년의 데이터를 활용한 매칭 서비스, 

기업들의 재의뢰율 98% 달성!

 

linux-os-확인 

이랜서는 현장에 바로 투입될 수 있는 IT 전문가24년의 데이터를 활용해 전문성부터 인성(협업 능력)까지 검증하여 매칭하는 IT 인재 매칭 플랫폼입니다.  

경력 기술서이력서만으로 검증이 어려운 인성(협업 능력)을 24년의 데이터를 활용하여 검증한 후 매칭하기 때문에 이랜서의 매칭 서비스를 사용하는 기업들은 IT 전문가 채용 시 전문가 검증을 위해 겪는 어려움을 해결할 수 있습니다.


 

[약 1.5억 개의 사용자 데이터] /

 [약 350만 개의 프리랜서 평가 데이터] 

억 단위의 데이터로 검증된 IT 전문가를 매칭합니다! 

 

기업들이 IT 전문가 채용 시 겪는 어려움이 바로 ‘인성 확인’입니다. 력 기술서이력서로 전문성을 확인할 수 있지만 인성은 확인하기 어렵기 때문인데요. 

이랜서는 24년 동안 쌓은 ‘억 단위 데이터를 활용해 IT 전문가의 전문성부터 인성까지 꼼꼼하게 확인/검증하여 프로젝트에 가장 적합한 IT 전문가를 매칭합니다.

때문에 이랜서를 사용한 기업들은 높은 맞춤형 IT 인재 매칭 서비스에 높은 신뢰도를 보이며 프로젝트를 지속적으로 의뢰하고 있습니다.


 

IT 인재, 이랜서 하나로!

필요한 인력을 원하는 시기에, 

데이터로 검증된 IT 인재를 매칭해 드립니다!

linux-link

이랜서는 기업이 IT 전문가 채용을 빠르게 할 수 있도록 프로젝트 등록 시 1:1 매니저를 매칭하여, 24시간 이내에 데이터로 검증된 IT 전문가를 매칭합니다. 

ERP, SAP, SCMMES, 대시보드 전문가 등 경영자원을 효율적으로 운영하는 전사적 자원 관리 프로그램 전문가와 웹/앱 개발 전문가를 찾으신다면 이랜서에 프로젝트를 등록하고 필요한 전문가를 요청해 보세요. 데이터로 검증된 최적합 IT 전문가를 매칭해 드립니다!



 

서비스 품질을 향상과 효과적으로 서버 관리를 위한

리눅스 전문가를 찾으시나요?

 

대한민국 No.1 IT 인재 매칭 플랫폼 이랜서

-> 회원 가입만 하세요.

-> 24시간 안에 전담 매니저가 연락을 드립니다.

-> 끝입니다. 이게 다냐구요? 네, 이게 다입니다.

-> 급하시다고요? 전화 주세요. 02-545-0042

 

24년의 노하우 데이터를 바탕으로 검증된 IT 프리랜서를 매칭해 드립니다.

 

freelancerBanner
projectBanner
댓글0
이랜서에 로그인하고 댓글을 남겨보세요!
0
/200
이랜서에 로그인하고 댓글을 남겨보세요!
0
/200
실시간 인기 게시물
이랜서 PICK 추천 게시물