cmake - 3(강의정리)

2023. 2. 21. 19:53

예전에 cmake를 공부하면서 찾은 강의 링크를 공부하지 못하였고, 현재와서 공부 시작

 - https://lagifun-inforecord.tistory.com/88

 

cmake - 2

1) CMake - Makefile을(정확히는 Makefile과 같은 빌드 파일을) 자동으로 생성하는 프로그램 즉, 최종 빌드는 Makefile을 기반으로 make 명령으로 수행해야 한다 - 의존성 정보를 일일이 기술하지 않아도 Make

lagifun-inforecord.tistory.com

 - https://www.youtube.com/playlist?list=PLItnFJec0rOr8C_DmOL7KjqKRCKYG6uRM

 

CMake 뽀개버리기

 

www.youtube.com


후기
강의내용은 기본적으로 cmake를 작성할 수 있는 사람을 대상으로 진행하는 것으로 보인다.
다소 이해하기 어려운 점이 존재하며, 음질이 좋은 편이 아니라 몇 번씩 다시 돌려 들었다.
하지만 배운내용 전체를 다 적용할 필요는 없고, 내가 개발하고자 하는 프로그램의 빌드 조건에 맞추어 배운 내용을 잘 가져다 쓰면 되니 배운 내용들을 프로젝트 진행할 때, 필요할 때 마다 찾아서 넣으면 문제없을 듯 하다.

강의자료에서 제공하는 링크들은 유용할 것으로 보인다. 필기의 내용 외에도 강의에서 설명하는 추가 내용들이 있으니, 시간이 있다면 강의를 보는 것이 좋다고 생각한다.

아래는 강의를 들으면서 적은 필기 내용.

 

 

1. 기본 가이드
https://gist.github.com/luncliff/6e2d4eb7ca29a0afd5b592f72b80cb5c


2. cmake 스크립트에서 주석은 #이다


3.
사용자는 CMakeLists.txt를 만들어야 한다.
CMakeCache.txt는 이전 빌드과정에서 남은 캐시이기 때문에 매 빌드 전 제거하는 것이 좋다.(변경사항이 미반영될 수도 있다)
기존의 CMakeLists.txt를 이해하고자 할 때는 완성된 빌드 스크립트(ex makefile)와 비교하면 이해하기 쉽다.


4.
cmake 스크립트 작성 시, 스크립트를 잘 작성할 수 있도록 사용자에게 알려주는 가이드가 존재한다.
 - https://cmake.org/cmake/help/latest/guide/user-interaction/


5.
복사와 인스톨 구분
copy
 - 명령에 명기되어 있는 파일, 라이브러리 등을 무조건 복사
install
 - 설치경로에 존재하는 파일(혹은 라이브러리)을 확인 후, 해당 파일과 설치할 파일을 비교하여 설치경로의 파일이 예전내용일 경우 복사 수행(즉 변경사항만 반영한다)


6.
생성된 makefile 내에서 컴파일 중복 참조를 막기위해
target_*()와 PUBLIC/PRIVATE 등의 키워드를 사용하여, 특정 파일(목적파일 등) 빌드를 위해 참조하는 파일이 있고, 다른 타겟 빌드 시에서는 사용이 불가하게 접근을 지정해준다.


7.
GLOB
덩어리, 글로브(glob) 패턴은 여러 파일 이름의 집합을 지정할 수 있도록 와일드카드 문자로 제공하는 페턴을 의미한다.
 - https://ko.wikipedia.org/wiki/%EA%B8%80%EB%A1%9C%EB%B8%8C_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)
cmake에서 file glob은 리스트의 형태로 구성된다
 -> cmake에서는 쓰지않는 것을 추천하고 있다
 -> 사용할 경우의 예시
     패턴추가 : file(GLOB cpplist test*.cpp)  ---> 리스트의 형태로 구성됨
     메세지로 확인 : message(STATUS "${cpplist}")  --> test1.cpp, test2.cpp
     특정파일제거 : list(REMOVE_ITEM cpplist test1.cpp)  --> 이런식이긴 한데, 실제로 돌리면 안돌려져서 다음으로 대체함
                    list(REMOVE_AT cpplist 0) --> 0번째 항의 내용을 제거
     메세지로 확인 : message(STATUS "${cpplist}")  --> test2.cpp


8.
 - 강의에서 코딩컨벤션을 언급하였는데, 갑자기 코딩 스텐다드와의 차이점이 궁금하였다.
 - 코딩 컨벤션 vs 코딩 스텐다드
     : 구글검색을 해보았지만, 둘을 명확하게 구분하는 게시물은 보이지 않는다.
     : 단지 아래 위키의 내용을 참조해보면 (개인적인 생각으로는) 코딩 스텐다드는 코딩 시 지켜야할 문법, 코드 스타일을 의미하고,
     : 코딩 컨벤션은 코딩 스텐다드를 포함한 전체적인 개발 방식, 프로그램간(혹은 내) 디자인을 의미하는 것으로 보인다.
    https://en.wikipedia.org/wiki/Coding_best_practices
    https://en.wikipedia.org/wiki/Coding_conventions


9.
크로스 컴파일 환경을 위해 cmake에서 사용하는 키워드
 - host : 호스트(현재 작성하는 환경)
 - system : 타겟


10. 기타
1) 모듈, 패키지, 라이브러리 차이점
 - https://etloveguitar.tistory.com/138
 - https://blckchainetc.tistory.com/m/313
 - https://joie-kim.github.io/Module-Library-Framework/

2) 프레임워크와 라이브러리의 차이점
 - 프레임워크와 라이브러리의 차이점은 아래의 링크가 정확히 설명하고 있다.
 - 예전에 아래 링크와 같이 차이점과 특징에 대해 설명듣고 이해한적이 있다.
 - https://juyeop.tistory.com/23

'Study > utilities' 카테고리의 다른 글

vscode 배우기  (0) 2023.03.24
cmake - 2  (0) 2021.09.08
cmake - 1  (0) 2021.09.01
make - 2  (0) 2021.08.22
make - 1  (0) 2021.08.22

+ Recent posts