Don't think! Just do it!

종합 IT 기술 정체성 카오스 블로그! 이... 이곳은 어디지?

임베디드 소프트웨어

CMake!!!!!!!!!!

방피터 2022. 8. 18. 12:50

사실 지금까지 임베디드 소프트웨어를 개발하면서 CMake나 Make 같은 거에 대해서 크게 신경써본 적이 없어. 개발 시간 단축을 이유로 IDE환경이 잘 갖춰진 환경에서만 개발을 했었는데 지금 생각해보면 그냥 게을렀던거지 ㅋㅋㅋ 임베디드 코드를 c로 짰는데 그걸 컴파일하려면 또 이상한 문법으로 makefile 편집을 하고 막 해야하고 ㅋㅋㅋ 어렵잖아~ 어색하기도 하고 ㅋ 그래서 평생을 도망다녔지. 그런데 이번에 rpi-pico 하면서 다시보니 CMake 정도는 무조건 해야겠더라고. 피할 수가 없어! 해야지 뭐 ㅋ

 

먼저 전통적(?)인 과정을 조금 설명하자만 c코드를 컴파일하려면 gcc를 사용해서 컴파일을 하는데 arm 코어는 gcc가 별도로 있어. rpi-pico처럼 cortex arm m0 코어에서 도는 프로그램은 gcc-arm-none-eabi 라는 이름의 arm용 gcc를 사용해야 하는거지. 각각의 c 파일을 object로 만들고 그걸 link해서 excutable이라고 부르는 임베디드용 바이너리 파일을 만드는데. 이게 설명하면 쉬워보여도...한숨이 나오지..

makefile 개 복잡해...

암튼 프로젝트에 포함된 모든 코드를 gcc로 컴파일하고 그걸 또 link를 해야하는데 그걸 일일이 다 못하니까 make라는 툴을 사용해. 컴파일 과정을 자동으로 실행시켜주는 거지. 그리고 그 실행 절차가 makefile에 담겨져 있어. 그 안에는 make 툴 자체의 옵션들, 프로젝트에 포함된 코드들의 위치, 라이브러리 디펜던시, 라이브러리 옵션 등등이 포함되어 있는데.. 음 이건 사람이 할짓이 아녀.. 임베디드 코드 짜기도 힘든데 make를 또 공부해야 할 판이라니... 👇👇 아래는 Make 메뉴얼...... 아 배째 난 못해!

https://www.gnu.org/software/make/manual/html_node/

 

Top (GNU make)

This file documents the GNU make utility, which determines automatically which pieces of a large program need to be recompiled, and issues the commands to recompile them. This is Edition 0.75, last updated 17 January 2020, of The GNU Make Manual, for GNU m

www.gnu.org

그런데 다른 사람들도 make가 사용하기 쉽지 않은지 make를 돕는 CMake라는 게 나왔어 ㅋㅋ 졸라 웃기지 않아? ㅋㅋㅋㅋ gcc를 돕기 위한 make, make를 돕기 위한 CMake ㅋㅋㅋㅋㅋㅋㅋㅋ 갑자기 과나의 라면의 달인이 생각나잖아!! ㅋㅋㅋㅋ

https://www.youtube.com/watch?v=UrSU6MuXPx0 

암튼 CMake는 makefile처럼 컴파일 할때 필요한 모든 디펜던시, 오프젝트 파일 이름 등을 기술할 필요가 없어. 그냥 CMakeLists.txt 파일에다가 프로젝트에 사용할 c파일만 명시해주면 코드 내부를 살펴보고 header 파일을 검색해서 알아서 디펜던시 정보를 파악해서 컴파일 해주는 고마운 툴이지 ㅋ 그래도 진입 난이도는 쪼금 있어. makefile 수준은 아니지만 말이야. ㅋㅋㅋ

 

아래는 내가 하고 있는 프로젝트에서 실행 파일(binary file)을 만드는 부분인데 꽤 심플하지. add_executable로 minerSlave라는 이름으로 컴파일을 만들건데 minerSlave.cpp 파일에서 나온다~ 뭐 이런 식이지.. 그리고 아래에는 컴파일 옵션이나 필요한 라이브러리 디펜던시를 연결해 주면 끝.

add_executable

위에서 사용된 라이브러리 중 utils와 ducoutils가 아래의 또 다른 CMakeLists.txt를 통해 만들어졌는데 add_library명령이 사용되었어. library 종류를 지정하는 부분 빼고는 add_executable과 크게 사용법이 다르지 않아. add_library로 만들고 거기에 사용될 target_source를 지정해주면 끝이야. 혹시 라이브러리로 만들 파일에 또 다른 라이브러리 디펜던시가 있으면 명시해주고 말이지.👇👇

CMakeLists.txt

뭐 다들 알겠지만 위에서 설명한 건 빙산의 일각 ㅋ 이거 말고도 CMake대해서 알아야 할 것들이 많아. 기본적인 옵션들부터 폴더 구조라던지, 경로를 설정하는 방법도 알아야 하고 컴파일 옵션이나 define 설정하는 방법도 필요해. 그래서 앞으로도 종종 CMake 관련된 글을 싸질러야 할 것 같아. 자꾸 기록해야 안 까먹지 ㅋㅋㅋ CMake 짜증나도 도망가지 말고 하자고 ㅋㅋ 다들 화이팅하고! 안녕!

반응형

'임베디드 소프트웨어' 카테고리의 다른 글

STM32CubeMX 와치독 디버그 옵션  (0) 2023.05.26
CCMRAM 사용하기  (2) 2023.03.22