이전 글에서 Makefile의 문법을 간단하게 알아봤었다.
target ... : dependency ... (one tab)command ...
여기의 target 부분을 레이블로 사용할 수 있다.
예를 들어서 빌드 과정을 거치고 나서 .o 로 끝나는 목적파일들을 한 번에 정리하고 싶다면?
clean 이라는 레이블을 만들어서 make clean 으로 편하게 사용한다든가 말이다.
# Makefile
.SUFFIXEX = .c .o
CC = gcc
TARGET = main.exe
OBJS = main.o printLine.o printLines.o
$(TARGET): $(OBJS)
$(CC) -o $(TARGET) $(OBJS)
clean : # add
rm $(OBJS) # add
rm 커맨드가 작동하지 않을 경우 윈도우의 경우
delete *.o
위와 같이 작성하여 사용하면 된다.
추가적으로 자주 사용하는 명령어가 있다면 레이블을 작성해두고 두고두고 사용하면 된다.
이름 그대로 미리 정의되어있는 매크로이다.
make -p 명령어로 정의되어있는 매크로를 확인할 수 있다.
이중에서 바꿔야 할 값은 재정의를 해서 사용할 수 있다.
WEAVE = weave
# default
MAKE_COMMAND := C:/MinGW/bin/mingw32-make
# default
LINK.cpp = $(LINK.cc)
# environment
PROCESSOR_ARCHITEW6432 = AMD64
# default
F77 = $(FC)
# default
COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
# environment
VSCODE_GIT_ASKPASS_EXTRA_ARGS = --ms-enable-electron-run-as-node
# environment
TERM_PROGRAM = vscode
# default
.VARIABLES :=
# default
PC = pc
...
엄청나게 많은 값들이 주르륵 나온다.
음,,, 이건 나중에 알아보는 걸로 하자.
make에는 내부 매크로가 정의되어있다.
따로 수정하거나 추가할 수 없고 미리 정의되어있는 대로만 사용가능하다.
이부분은 참고 사이트에 적혀있는게 좋아서 그대로 옮겼다.
$* <- 확장자가 없는 현재의 목표 파일(Target) $@ <- 현재의 목표 파일(Target) $< <- 현재의 목표 파일(Target)보다 더 최근에 갱신된 파일 이름 $? <- 현재의 목표 파일(Target)보다 더 최근에 갱신된 파일이름
=> 참고: 책에서는 $< 와 $?를 약간 구분하고 있지만 거의 같다고 봐도 무방할 것입니다.
위에 써있는 내부 매크로를 사용하여 이전에 작성했던 Makefile을 수정해보자!
# Makefile
.SUFFIXEX = .c .o
CC = gcc
TARGET = main.exe
OBJS = main.o printLine.o printLines.o
$(TARGET): $(OBJS)
$(CC) -o $@ $(OBJS) # edit
.c.o : # add -> 확장자 규칙도 직접 작성했다
gcc -c $< # add
clean :
rm $(OBJS)
지금 예제로는 딱히 바뀔게 없다,,,
사실 찐하게 하고 싶은데 이걸 벌써 찐하게 하고 시작하면 진이 빠질 것 같아서 미룬 것도 있다,,ㅎ
Cmake 도 간단하게 공부하고 나선 이제 C, C++ 만큼은 정말 찐하게 공부할 예정이다.
이전에 공부하면서 가볍게 넘어갔던 포인터, 구조체, Container 등을 자세하게 공부하고 알고리즘 공부를 할 예정이다.