raylib:컴파일_및_makefile
컴파일 및 makefile
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판이전 판다음 판 | 이전 판 | ||
raylib:컴파일_및_makefile [2023/11/23 00:37] – 이거니맨 | raylib:컴파일_및_makefile [2023/11/24 00:46] (현재) – 더 읽기 이거니맨 | ||
---|---|---|---|
줄 286: | 줄 286: | ||
=== 나. 설명 === | === 나. 설명 === | ||
+ | |||
+ | == (가) raylib 라이브러리 == | ||
+ | |||
+ | 우리는 libraylib.a 라는 라이브러리를 이용할 것이다. 따라서 이에 대한 경로를 지정해 줘야 한다. | ||
+ | |||
+ | RAYLIB_PATH | ||
+ | |||
+ | 로 하여 경로를 지정해 주었다. | ||
+ | |||
+ | == (나) 컴파일러 == | ||
+ | |||
+ | c로 작성한 파일은 gcc로 컴파일 하고, c++로 작성한 파일은 g++로 컴파일 한다. | ||
+ | 따라서 컴파일러를 지정해 주어야 한다. | ||
+ | |||
+ | CC = g++ | ||
+ | | ||
+ | == (다) 디버그 모드/ | ||
+ | |||
+ | 디버그 모드와 릴리스모드의 옵션을 설정해 준다. 다음과 같이 설정해주었다. | ||
+ | |||
+ | < | ||
+ | ifeq ($(BUILD_MODE), | ||
+ | CFLAGS += -g -O0 | ||
+ | else | ||
+ | CFLAGS += -s -O1 | ||
+ | endif | ||
+ | </ | ||
+ | |||
+ | == (라) 헤더파일과 라이브러리 == | ||
+ | |||
+ | 헤어파일과 라이브러리를 각각 그 경로를 설정해주었다. | ||
+ | |||
+ | == (마) 목적 파일 만들기 == | ||
+ | |||
+ | 각 소스파일들을 기계어로 만들어야 한다. | ||
+ | |||
+ | 그런데 우리가 배치파일(혹은 리눅스에서는 쉘 파일)을 만들지 않고 이렇게 Makefile을 만드는 이유는 뭘까? | ||
+ | |||
+ | Makefile을 만들면 이미 만들어진 목적파일은 생략하고 변경된 소스만 다시 목적파일로 만들어 주기 때문이다. 만약 배치파일로 만든다면 목적파일의 변경여부와 상관없이 매번 목적파일을 새롭게 만들것이다. | ||
+ | |||
+ | 따라서 목적파일이 그대로 있어야만 한다. 그런데 목적파일이 내 소스파일과 섞이면 지저분하므로, | ||
+ | |||
+ | 파일탐색기로 ' | ||
+ | |||
+ | 그리고 위의 소스에서 보는 바와 같이 각 목적파일은 ' | ||
+ | |||
+ | < | ||
+ | $(OBJ_DIR)/ | ||
+ | $(CC) | ||
+ | </ | ||
+ | |||
+ | 콜론(: | ||
+ | |||
+ | 의존파일을 이용하여 목적파일을 만드는 것이다. | ||
+ | |||
+ | 그런데 컴파일러(g++)에서 의존파일의 명칭을 바꾸려면 아웃풋을 뜻하는 -o 플래그 뒤에 그 의존파일의 전체 이름을 넣어야 한다. | ||
+ | |||
+ | 우리의 경우 ' | ||
+ | |||
+ | 이렇게 -o 플래그 뒤에 만들어질 목적 파일의 명칭을 적어야 한다. | ||
+ | |||
+ | Makefile에서 타켓파일을 지정한느 매크로는 ' | ||
+ | |||
+ | == (바) 아이콘 == | ||
+ | |||
+ | 윈도우 환경에서 파일의 아이콘을 설정해줄 수도 있다. 우리는 아이콘을 다음과 같이 링크해 줬다. | ||
+ | |||
+ | ICON += $(RAYLIB_PATH)/ | ||
+ | | ||
+ | == (사) 컴파일 하기 == | ||
+ | |||
+ | 이제 만들어진 목적파일들을 링크하여줘야 한다. | ||
+ | |||
+ | < | ||
+ | #컴파일 | ||
+ | tetris : $(OBJS) | ||
+ | $(CC) $(CFLAGS) | ||
+ | </ | ||
+ | |||
+ | tetris라는 이름으로 목적파일들을 컴파일 해준다. 그런데 라이브러리의 링크를 지시하는 플래그들은 맨 뒤에 와야 한다. | ||
+ | |||
+ | 따라서 ' | ||
+ | |||
+ | |||
+ | == (아) 메이크의 대상 지정하기 == | ||
+ | |||
+ | 이렇게 Makefile을 만든 뒤에는 커맨드 창에서 ' | ||
+ | |||
+ | 그런데 make는 지정된 타켓만 make를 한다. 우리는 최종적으로 tetris라는 실행파일을 만들 것인데, | ||
+ | |||
+ | 이러한 최종 실행파일은 tetris라는 이름으로 타켓이 지정되어 있다. | ||
+ | |||
+ | 따라서 'make tetris' | ||
+ | |||
+ | 만약 아무런 지정도 안 해주고 단순히 ' | ||
+ | |||
+ | 그런데 이렇게 매번 'make tetris' | ||
+ | |||
+ | 따라서 | ||
+ | |||
+ | 아예 | ||
+ | |||
+ | < | ||
+ | # Define default make program: Mingw32-make | ||
+ | MAKE = mingw32-make tetris | ||
+ | </ | ||
+ | |||
+ | 라고 하여 타겟 자체를 지정해 버리자. | ||
+ | |||
+ | 그리고는 이렇게 코드를 짜면 모든 목적파일을 검토 한 후에 tetris라는 최종 파일을 만든다. | ||
+ | |||
+ | < | ||
+ | all: | ||
+ | $(MAKE) | ||
+ | </ | ||
+ | |||
+ | 이제 커맨드 창에서 단순하게 ' | ||
+ | |||
+ | |||
+ | ===== VS Code의 환경 설정하기 ===== | ||
+ | |||
+ | ==== 1. task.json 설정하기 ==== | ||
+ | |||
+ | 우리는 위 Makefile에서 딱 한가지 분기만 만들었다. 디버그와 릴리스 모드 분기다. | ||
+ | |||
+ | 따라서 Makefile을 실행시키는 task.json에는 다른 인자들은 설정해 줄 필요 없고, 단지 하나, 디버그 모드에서는 | ||
+ | |||
+ | BUILD_MODE=DEBUG | ||
+ | | ||
+ | 를 넣어주면 된다. 굳이 이를 코드로 보여주면 다음과 같다. | ||
+ | |||
+ | <file javascript task.json> | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ] | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== 2. launch.json ==== | ||
+ | |||
+ | 실행할 프로그램의 경로를 정확히 설정해 주면 된다. | ||
+ | |||
+ | 우리는 tetris.exe 하나로만 실행파일을 만들 것이므로, | ||
+ | |||
+ | " | ||
+ | | ||
+ | 이렇게만 바꾸어 주면 된다. | ||
+ | |||
+ | |||
+ | ==== 3. c_cpp_properties.json ==== | ||
+ | |||
+ | 에디터가 인텔리센스를 보여줄 헤더의 위치를 설정해주는 것이다. | ||
+ | |||
+ | 다음과 같이 해당 경로를 설정해 주면 된다. | ||
+ | |||
+ | < | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ], | ||
+ | </ | ||
+ | |||
+ | ===== 더 읽어보기 ===== | ||
+ | |||
+ | [[raylib: |
raylib/컴파일_및_makefile.1700667424.txt.gz · 마지막으로 수정됨: 2023/11/23 00:37 저자 이거니맨