일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- neural network
- Next.js
- cache locality
- 구글코랩
- PYTHON
- mnist
- ITER
- Colab
- 실수
- 식별연산자
- gitmoji
- __init__
- 캐시의 지역성
- self
- 비공개 속성
- 인공신경망
- 정수
- 메서드채이닝
- choice
- Keras
- built-in function
- 깃모지
- 맴버연산자
- 추상 클래스
- f-string
- 정적 메서드
- class
- randrange
- nextjs
- 메서드
- Today
- Total
IT world
리눅스 Makefile 본문
이번 포스팅은 Makefile에 대해서 작성하려고 한다.
Makefile이란
내용이 복잡하고 오래걸리는 컴파일을 간단하게 한페이지에 작성해서 하나의 파일로 사용하는것이 장점이다.
makefile은 파일의 상호 의존 관계의 목록으로 make에게 어떤 프로그램을 컴파일하고 링크해야하는 지 방법을 설명한 것으로
make명령은 makefile에 설정된 정보를 읽어서 여러 소스 파일을 컴파일하고 최종 실행 파일을 생성한다.
작업을 수행하기 전에 사용하는 명령들에 대해 간단히 소개하고 시작하겠다.
1. gcc : 필자는 c언어파일을 만들어서 사용하기 때문에 c언어 컴파일러인 gcc를 사용.
2. -c : 컴파일을 하기 위한 명령
3. -o : 각각의 파일들이 컴파일 된다면 .o의 확장명을 사용하는 파일들이 생성되고 컴파일이 끝난 파일로 실제로 동작하는 파일들이다.
해당 파일들을 최종 실행할 파일에 -o를 통해 등록하여 최종 파일이 실행될 수 있도록 설정하는 것이다.
Makefile을 사용하기 위해 Temp폴더에 별도의 makefile 폴더를 생성
vi 편집기를 통해 함수의 기능을 수행하는 kk1.c 와 kk2.c 파일을 생성하고 메인의 기능을 수행하는 main.c, 헤더파일인 main.h를 생성.
[kk1.c 생성]
[kk2.c 생성]
[main.c 생성]
[main.h 생성]
vi 편집기를 통해 Makefile 생성
이런식으로 makefile을 생성하는데
최종 실행 파일을 app.out로 사용할 것이며 실행파일들을 등록한다
app.out: ... 이 부분에 어떤 것을 사용하겠다고 룰을 정한 것이고
gcc -o를 통해 명령을 정의한 것이다.
변수를 사용하여 코드를 대신하여 변수를 사용한다
코드의 유연성을 위해 사용하며 $를 사용하여 해당 변수를 참조한다.
[이렇게 변수를 사용해서 유연성을 높였다.]
해당 파일을 수행할 때마다 .o 파일들과 app.out을 지워준 후에 수행해야하고
rm -rf app.out *.o 을 계속 입력해줘야하는 귀찮음이 있는데
clean이란 작업을 넣어줘서 쉽게 작성할 수 있도록 추가하였다.
make를 입력해서 자동 컴파일 시키고 최종실행 파일인 app.out 파일을 생성한다.
그 후 ./app.out 을 입력하면 해당 파일이 실행되서 출력결과를 확인할 수 있다.
[make를 입력하여 컴파일을 수행하면 .o 실행파일들과 app.out파일이 생성되고 출력결과를 확인할 수 있다.]
make clean을 통해 모든 오브젝트 파일을 삭제한 이 후 다시 수행해도 결과는 동일하다.
또한 kk2.c 파일을 수정한 뒤 make 명령을 입력하면 수정이 이루어진 kk2.c만 재컴파일이 이루어지고 나머지는 컴파일이 반복되지 않는다 (컴파일의 최소화!)
kk2.c파일을 수정없이 재저장 한 이후에 make명령으로 실행했을 때에도 kk2.c가 재번역된다.
'리눅스' 카테고리의 다른 글
리눅스 - Hive (0) | 2019.11.26 |
---|---|
리눅스 wordcount를 사용해서 데이터 값 시각화하기 (0) | 2019.11.26 |
리눅스 하둡1 (0) | 2019.11.26 |
리눅스 ssh key 생성 (0) | 2019.11.25 |
리눅스 간단한 예제 (0) | 2019.11.22 |