https://medium.com/@johnehk86/91-what-is-make-what-does-makefile-mean-801924b53847
91. What is ‘make’? What does ‘makefile’ mean?
Today, let’s discuss a slightly new topic.
medium.com
아주 잘 설명된 블로그 글.
■ 컴파일러로 .c파일 -> .o(오브젝트 파일)로 컴파일
태스킹에서 사용하는 컴파일러 = cctc.exe
■ .o(오브젝트 파일들)과 .a(라이브러리) 들을 모아서 링커로 링킹해서 최종 elf 생성
컴파일시 옵션 설정도 명령어에 같이 추가로 작성
(CFLAG)
링킹 옵션도 추가로 같이작성 (LDFLAG)
컴파일러의 증분빌드
컴파일러가 빌드할때 , 항상 모든 c파일을 다시 컴파일하면 시간이 너무 오래 걸린다.
그래서 한번 빌드를 한 이후에 다시 빌드 할 때는 코드 변경에 의해 다시 컴파일 해야되는 파일들만 골라서 다시 컴파일하는데 이걸 증분빌드라고 한다.
아래는 증분빌드 대상을 고르는 컴파일러의 동작원리다.
1).o파일의 생성시간보다 .c파일의 마지막 수정시간이 더 최근이라면 해당 c파일은 증분빌드 대상에 포함.
수정시간이 판단 기준이기 때문에 코드상에 주석이 변경되거나 아무런 변경점이 없더라도 저장 시간이 바뀌면 컴파일러는 해당 파일을 증분빌드 대상으로 인식
2).o 파일이 없는 경우 .c 파일은 증분빌드 대상에 포함
3) 각 c 파일별로 의존성을 갖는 파일들이 변경됐는지 확인해서. 변경됐다면 그 c파일도 증분빌드에 포함
참고) 의존성 갖는 파일 확인방법?
컴파일 할 때 .d(dependency) 파일이 .o마다 하나씩 생성되며, .d파일에 해당 코드와 연관성을 갖는 c파일과 h 파일들이 나열되어있음.
ex) a.c 파일이 a.h 파일과 b.h파일을
include하는 경우
a.d에는 a.h 과 b.h 파일이 적혀 있음.
빌드 할 때, 컴파일러는
이전에 빌드를 통해 이미 만들어진 a.o파일이 있다면, a.o 파일의 생성시간과 .d 파일에 쓰여진 의존성을 갖는 파일의 마지막 수정시간을 비교해서.
a.h 파일 또는 b.h파일이 변경된 경우 a.c를 증분빌드 대상에 포함시킴.
참고로 이때도 역시 컴파일러가 파일의 변경을 인식하는건 파일수정 시간이 기준이라 내용 바뀐거 없어도 새로 저장하면 빌드대상이 된다.
'프로그래밍 관련 > 프로그래밍 관련 잡지식' 카테고리의 다른 글
파이썬 음성인식 프로그램 (0) | 2025.05.29 |
---|---|
배치 파일에서 외부 프로그램 호출 시, 결과 리턴 받기 (0) | 2025.05.23 |
깃허브 코파일럿 사용하기 (0) | 2025.04.12 |
단축키로 복붙 여러개 하기 (0) | 2023.08.01 |
임베디드 mcu 최적화 코딩 팁 (0) | 2023.07.17 |