여러 파일을 쉽게 컴파일하기


옛날에 공부하면서 정리해놨었는데 다시 기억해내기위해 정리해봄

1. make

  • 사용하는 이유
    큰 프로젝트라면 일일이 컴파일하기 어렵고 귀찮고
    목적파일 만들다가 gcc -c veryImportant.c -o veryImportant.c
    이렇게 해버려서 아주 중요한 파일을 날려먹을수도 있기 때문에
    make로 미리 세팅해놓는다면 쉽고 편하게 컴파일 할 수 있다.

  • 사용법
    make명령어는 Makefile이 가장 중요하다.
    규칙에 맞게 Makefile이라는 이름의 텍스트 파일을 작성해준 뒤
    (대소문자도 정확히 구분해야했던거같음)
    (작업 디렉토리 안에다가) make명령어를 실행하면 끝이다.

2. Makefile작성 규칙

Makefile에 들어갈 내용은 크게 두가지로 구분할 수 있다.

  1. 명령어 작성(의존성)
  2. 매크로

2.1 명령어 작성

1
2
3
(target file) : (dependent file 1) (dependent file 2)
	(command 1)
	(command 2)

위 형식이 가장 기본이다.
예를 들어 test.c파일이 있다고 했을 때
c파일을 목적파일로 변환시키게 하려면

1
2
test.o : test.c
	gcc test.c -c -o test.o

Makefile안에 해당 내용을 작성하고 make명령을 실행하면 된다.

2.1.a 의존성 (dependent file)

만약 큰 프로젝트를 다루고 있다고 가정했을때
파일 하나만 수정하고 make 명령을 수행했는데
프로젝트 안의 모든 소스코드를 컴파일하는 것은
대충 생각해봐도 아주아주아주 비효율적인 행동이다.
따라서 make명령어에서는 그런일을 방지하기 위해 파일의 의존성을 명시하게 한다.///

1
2
test.o : test.c test.h
	gcc test.c -c -o test.o

test.c와 test.h파일이 모두 변하지 않았으면 gcc test.c -c -o test.o 명령은 실행되지 않는다.
만약 test.c test.h중 하나라도 수정했으면 명령을 수행한다.

2.2 매크로

Makefile에서 자주 쓰는 구문들이 있다.
gcc나 파일의 이름들이 그 예다.
그런 키워드들을 매크로로 설정해서 간편하게 Makefile을 작성할 수 있다. 매크로를 사용해서 Makefile을 작성하면 다음과 같다.

1
2
3
4
CC = gcc

test.o : test.c
	($CC) test.c -c -o test.o

매크로를 사용할때는 괄호와 $기호를 붙여줘야한다.

3. 팁

1
2
3
4
5
6
7
8
main.exe : test.o main.o
	gcc test.o main.o -o main.exe
	
test.o : test.c
	gcc test.c -c -o test.o
	
main.o : main.c
	gcc main.c -c -o main.o

$make test.o 명령을 실행하면 test.o 파일만 만들수도 있다.
(target file) 이름이 make 뒤에 명령어로 쓰일수 있다는거라

1
2
clean:
	rm -rf *.o *.exe

$ make clean 이러면 작업디렉토리의 목적파일과 실행파일을 지울 수 있다. 이걸 여러가지로 활용하면 된다.

태그: ,

카테고리:

업데이트:

댓글남기기