* 이 글은 Redis 7.0.8 기준으로 작성되었습니다.
CentOS에서 Redis를 설치하던 중에 Redis Compile 과정에서 make와 make install의 두 가지의 방법이 어떻게 다른 지 궁금하였다.

* 이미지 출처 Redis 설치 공식문서

* 이미지 출처: KHU 리눅스시스템프로그래밍 강의
make를 이용하여 효율적으로 컴파일을 관리할 수 있음$ make [-f makefile] [options] [targets] [macro definitions]-d : debug mode-e : enviroment variables override assignments within makefiles-i : ignore error codes-s : silent mode-t : touch target filesMakefile의 구성요소
target: [prerequisites] [; command]tab [@] commandname = stringinclude file-name#Internal macros
$@ : 현재 target의 이름$< : 현재 prerequisite의 이름$^ : 현재 모든 prerequisite의 목록$? : target 보다 더 최근에 갱신된 prerequisite 목록$* : suffix를 제외한 현재 prerequisite의 이름$% : 대응되는 .o 파일의 이름이제 Redis를 컴파일할 때 사용하는 make 명령어와 Makefile에 대해 알아보자.
Redis 설치 과정에서 사용하는 make 명령어로는 아래의 3가지 경우가 있다고 볼 수 있다.
make
make install
make install PREFIX=/usr/local/redis
Redis 폴더를 살펴보면 폴더 바로 하위에 Makefile 하나와 src 폴더 하위에 존재하는 Makefile 하나로 총 2개의 Makefile을 볼 수 있다.
아래의 내용은 Redis의 Makefile 중에서도 설명에 필요한 부분만을 발췌해온 것이다.
redis/Makefile# Top level makefile, the real shit is at src/Makefile
default: all
.DEFAULT:
cd src && $(MAKE) $@
install:
cd src && $(MAKE) $@
.PHONY: install
redis/src/MakefilePREFIX?=/usr/local
INSTALL_BIN=$(PREFIX)/bin
INSTALL=install
PKG_CONFIG?=pkg-config
all: $(REDIS_SERVER_NAME) $(REDIS_SENTINEL_NAME) $(REDIS_CLI_NAME) $(REDIS_BENCHMARK_NAME) $(REDIS_CHECK_RDB_NAME) $(REDIS_CHECK_AOF_NAME)
@echo ""
@echo "Hint: It's a good idea to run 'make test' ;)"
@echo ""
install: all
@mkdir -p $(INSTALL_BIN)
$(call MAKE_INSTALL,$(REDIS_SERVER_NAME),$(INSTALL_BIN))
$(call MAKE_INSTALL,$(REDIS_BENCHMARK_NAME),$(INSTALL_BIN))
$(call MAKE_INSTALL,$(REDIS_CLI_NAME),$(INSTALL_BIN))
@ln -sf $(REDIS_SERVER_NAME) $(INSTALL_BIN)/$(REDIS_CHECK_RDB_NAME)
@ln -sf $(REDIS_SERVER_NAME) $(INSTALL_BIN)/$(REDIS_CHECK_AOF_NAME)
@ln -sf $(REDIS_SERVER_NAME) $(INSTALL_BIN)/$(REDIS_SENTINEL_NAME)
make 를 사용하면 Makefile에 정의된 default인 all 부분이 실행된다.make install 을 사용하면 Makefile의 install 부분이 실행된다.make install PREFIX=원하는경로를 사용하면 설정한 PREFIX 값을 사용하여 Makefile의 install 부분이 실행된다.make는 소스 파일들을 컴파일하여 redis-server, redis-cli 등의 프로그램을 빌드한다.make install은 make를 통해 만들어진 설치파일(setup)을 알맞은 위치에 설치한다.ln -sf)한다.redis-7.0.8/src/Makefile의 첫 줄을 보면 PREFIX 변수 설정에 ?=를 사용한 것을 볼 수 있다.?= 는 조건 변수 할당 연산자로 변수가 아직 정의되지 않은 경우에만 효력을 가진다.make install만 해준다면 /usr/local/bin의 경로에 install 된다.make install PREFIX=원하는경로 명령어를 사용하여 PREFIX를 지정해주면 $(PREFIX)/bin의 경로에 install 된다.