← Documents Documentation/tools/rv/Makefile GitHub 원문 ↗

Linux 6.18.37 · Kernel Tools

RV 매뉴얼 페이지 빌드 Makefile

RV RST 문서를 rst2man으로 변환하고 정리·설치·제거하는 Makefile 전체 흐름을 설명합니다.

Source pathDocumentation/tools/rv/Makefile
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약·해설

Makefile:1-52

RV RST 문서를 rst2man으로 변환하고 정리·설치·제거하는 Makefile 전체 흐름을 설명합니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 # SPDX-License-Identifier: GPL-2.0-only
2
3 INSTALL ?= install
4 RM ?= rm -f
5 RMDIR ?= rmdir --ignore-fail-on-non-empty
6
7 PREFIX ?= /usr/share
8 MANDIR ?= $(PREFIX)/man
9 MAN1DIR = $(MANDIR)/man1
10
11 MAN1_RST = $(wildcard rv*.rst)
12
13 _DOC_MAN1 = $(patsubst %.rst,%.1,$(MAN1_RST))
14 DOC_MAN1 = $(addprefix $(OUTPUT),$(_DOC_MAN1))
15
16 RST2MAN_DEP := $(shell command -v rst2man 2>/dev/null)
17 RST2MAN_OPTS += --verbose
18
19 TEST_RST2MAN = $(shell sh -c "rst2man --version > /dev/null 2>&1 || echo n")
20
21 $(OUTPUT)%.1: %.rst
22 ifndef RST2MAN_DEP
23 $(info ********************************************)
24 $(info ** NOTICE: rst2man not found)
25 $(info **)
26 $(info ** Consider installing the latest rst2man from your)
27 $(info ** distribution, e.g., 'dnf install python3-docutils' on Fedora,)
28 $(info ** or from source:)
29 $(info **)
30 $(info ** https://docutils.sourceforge.io/docs/dev/repository.html )
31 $(info **)
32 $(info ********************************************)
33 $(error NOTICE: rst2man required to generate man pages)
34 endif
35 rst2man $(RST2MAN_OPTS) $< > $@
36
37 man1: $(DOC_MAN1)
38 man: man1
39
40 clean:
41 $(RM) $(DOC_MAN1)
42
43 install: man
44 $(INSTALL) -d -m 755 $(DESTDIR)$(MAN1DIR)
45 $(INSTALL) -m 644 $(DOC_MAN1) $(DESTDIR)$(MAN1DIR)
46
47 uninstall:
48 $(RM) $(addprefix $(DESTDIR)$(MAN1DIR)/,$(_DOC_MAN1))
49 $(RMDIR) $(DESTDIR)$(MAN1DIR)
50
51 .PHONY: man man1 clean install uninstall
52 .DEFAULT_GOAL := man
53

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

도구·설치 경로와 입력 문서

1-17

이 Makefile은 `GPL-2.0-only` 라이선스 식별자를 사용한다. `INSTALL`, `RM`, `RMDIR`은 외부에서 덮어쓸 수 있고 기본값은 각각 `install`, `rm -f`, `rmdir --ignore-fail-on-non-empty`다.

기본 설치 prefix는 `/usr/share`, 매뉴얼 루트는 `$(PREFIX)/man`, 섹션 1 경로는 `$(MANDIR)/man1`이다. `rv*.rst`를 입력으로 찾아 확장자를 `.1`로 바꾸고 `$(OUTPUT)` 접두어를 붙여 생성 대상 `DOC_MAN1`을 구성한다.

주요 Make 변수
Variable기본값·의미
INSTALL / RM / RMDIR설치·삭제·빈 디렉터리 제거 명령
PREFIX/usr/share
MANDIR / MAN1DIR$(PREFIX)/man / $(MANDIR)/man1
MAN1_RSTrv*.rst 입력 목록
DOC_MAN1$(OUTPUT)에 생성할 .1 파일 목록

입력 RST에서 설치할 man1 파일까지의 경로를 만든다.

# SPDX-License-Identifier: GPL-2.0-only

INSTALL		?= install
RM		?= rm -f
RMDIR		?= rmdir --ignore-fail-on-non-empty

PREFIX		?= /usr/share
MANDIR		?= $(PREFIX)/man
MAN1DIR		= $(MANDIR)/man1

MAN1_RST	= $(wildcard rv*.rst)

_DOC_MAN1	= $(patsubst %.rst,%.1,$(MAN1_RST))
DOC_MAN1	= $(addprefix $(OUTPUT),$(_DOC_MAN1))

RST2MAN_DEP	:= $(shell command -v rst2man 2>/dev/null)
RST2MAN_OPTS	+= --verbose

rst2man 확인과 패턴 규칙

18-36

`RST2MAN_DEP`는 `command -v rst2man`으로 변환기 존재 여부를 확인하고 `RST2MAN_OPTS`에는 `--verbose`를 추가한다. `TEST_RST2MAN`은 `rst2man --version` 실행이 실패하면 `n`을 돌려준다.

`$(OUTPUT)%.1: %.rst` 패턴 규칙은 `rst2man`이 없으면 설치 안내를 출력하고 오류로 빌드를 중단한다. Fedora 예시는 `dnf install python3-docutils`이며, 소스 저장소 URL도 제시한다. 도구가 있으면 `rst2man $(RST2MAN_OPTS) $< > $@`로 RST 입력을 man 페이지 출력으로 변환한다.

RST에서 man1 생성
rv*.rstCheck rst2man
rst2man missingPrint install guidanceStop with error
rst2man availablerst2man --verbose$(OUTPUT)%.1

의존성 검사에 성공한 뒤 패턴 규칙이 변환을 수행한다.

패턴 규칙 자동 변수
표현의미
$<첫 번째 입력 .rst 파일
$@생성할 .1 대상 파일
$(RST2MAN_OPTS)현재 --verbose 옵션

변환 명령에서 Make 자동 변수가 가리키는 대상이다.


TEST_RST2MAN = $(shell sh -c "rst2man --version > /dev/null 2>&1 || echo n")

$(OUTPUT)%.1: %.rst
ifndef RST2MAN_DEP
	$(info ********************************************)
	$(info ** NOTICE: rst2man not found)
	$(info **)
	$(info ** Consider installing the latest rst2man from your)
	$(info ** distribution, e.g., 'dnf install python3-docutils' on Fedora,)
	$(info ** or from source:)
	$(info **)
	$(info **  https://docutils.sourceforge.io/docs/dev/repository.html )
	$(info **)
	$(info ********************************************)
	$(error NOTICE: rst2man required to generate man pages)
endif
	rst2man $(RST2MAN_OPTS) $< > $@

생성·정리·설치·제거 목표

37-52

`man1`은 모든 `DOC_MAN1` 파일에 의존하고 `man`은 `man1`을 호출한다. `clean`은 생성된 매뉴얼을 삭제한다.

`install`은 먼저 man 페이지를 만든 뒤 `$(DESTDIR)$(MAN1DIR)`을 mode 755로 생성하고 문서를 mode 644로 설치한다. `uninstall`은 설치된 파일을 지우고 비어 있으면 man1 디렉터리를 제거한다. 다섯 목표는 `.PHONY`이며 기본 목표는 `man`이다.

Make 목표
Target동작
man / man1모든 섹션 1 매뉴얼 생성
clean생성된 DOC_MAN1 삭제
install디렉터리 755, 매뉴얼 644로 설치
uninstall설치 파일 삭제 후 빈 디렉터리 제거
.DEFAULT_GOALman

빌드와 배포 생명주기를 정리한다.

man1: $(DOC_MAN1)
man: man1

clean:
	$(RM) $(DOC_MAN1)

install: man
	$(INSTALL) -d -m 755 $(DESTDIR)$(MAN1DIR)
	$(INSTALL) -m 644 $(DOC_MAN1) $(DESTDIR)$(MAN1DIR)

uninstall:
	$(RM) $(addprefix $(DESTDIR)$(MAN1DIR)/,$(_DOC_MAN1))
	$(RMDIR) $(DESTDIR)$(MAN1DIR)

.PHONY: man man1 clean install uninstall
.DEFAULT_GOAL := man