u - boot Makefile 분석 -- (1)
[u-boot: 2014.01-rc1, e03c76c30342797a25ef9350e51c8daa0b56f1df]
다음은 u - boot Makefile 분석 을 진행 하 겠 습 니 다.
1. u - boot 의 고정 버 전 정보, 컴 파일 시 생 성 된 시간 과 동적 버 전 정보.
1 #
2 # (C) Copyright 2000-2013
3 # Wolfgang Denk, DENX Software Engineering, [email protected].
4 #
5 # SPDX-License-Identifier: GPL-2.0+
6 #
7
8 VERSION = 2014
9 PATCHLEVEL = 01
10 SUBLEVEL =
11 EXTRAVERSION = -rc1
12 ifneq "$(SUBLEVEL)" ""
13 U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
14 else
15 U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL)$(EXTRAVERSION)
16 endif
17 TIMESTAMP_FILE = $(obj)include/generated/timestamp_autogenerated.h
18 VERSION_FILE = $(obj)include/generated/version_autogenerated.h
19
1~6: Header (license information) 8 ~ 11: u - boot 버 전의 기본 정보
12 ~ 6: SUBLEVEL 이 비어 있 는 지 판단 하여 UBOOT_VERSION
17 ~ 8: 컴 파일 할 때 생 성 된 시간 정보, 버 전 정보, 후속 상세 설명.
2. u - boot 의 호스트 정 보 를 컴 파일 합 니 다.
20 HOSTARCH := $(shell uname -m | \
21 sed -e s/i.86/x86/ \
22 -e s/sun4u/sparc64/ \
23 -e s/arm.*/arm/ \
24 -e s/sa110/arm/ \
25 -e s/ppc64/powerpc/ \
26 -e s/ppc/powerpc/ \
27 -e s/macppc/powerpc/\
28 -e s/sh.*/sh/)
29
30 HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
31 sed -e 's/\(cygwin\).*/cygwin/')
32
33 export HOSTARCH HOSTOS
20 ~ 28: 셸 명령 을 실행 하여 호스트 의 구 조 를 가 져 온 다음 에 교체 동작 을 합 니 다 (예 를 들 어 sa 110 을 arm 으로 바 꿉 니 다).uname 에 대한 구체 적 인 명령 은 스스로 찾 아 보 세 요.30 ~ 31: 셸 명령 을 실행 하여 호스트 운영 체 제 를 가 져 오고 큰 글 씨 를 소문 자로 변환 합 니 다.
33: export 호스트 의 구조 와 운영 체제.
3. VENDOR 에 빈 값 부여
35 # Deal with colliding definitions from tcsh etc.
36 VENDOR=
37
4. 조용 한 컴 파일 이 필요 한 지 판단 한다.
38 #########################################################################
39 # Allow for silent builds
40 ifeq (,$(findstring s,$(MAKEFLAGS)))
41 XECHO = echo
42 else
43 XECHO = :
44 endif
make 의 flag 에 s 가 있 는 지 판단 하고 있 으 면 정적 컴 파일 입 니 다.make - s 를 실행 하면 컴 파일 정보 출력 을 보지 못 할 것 입 니 다.5. 생 성 된 object 파일 을 단독 폴 더 에 컴 파일 할 지 여 부 를 판단 합 니 다.구체 적 으로 주석 을 보면 알 수 있다.
46 #########################################################################
47 #
48 # U-boot build supports generating object files in a separate external
49 # directory. Two use cases are supported:
50 #
51 # 1) Add O= to the make command line
52 # 'make O=/tmp/build all'
53 #
54 # 2) Set environment variable BUILD_DIR to point to the desired location
55 # 'export BUILD_DIR=/tmp/build'
56 # 'make'
57 #
58 # The second approach can also be used with a MAKEALL script
59 # 'export BUILD_DIR=/tmp/build'
60 # './MAKEALL'
61 #
62 # Command line 'O=' setting overrides BUILD_DIR environment variable.
63 #
64 # When none of the above methods is used the local build is performed and
65 # the object files are placed in the source directory.
66 #
67
68 ifeq ("$(origin O)", "command line")
69 BUILD_DIR := $(O)
70 endif
6. 소스 코드 검 사 를 해 야 하 는 지 확인 하고 주석 을 구체 적 으로 보면 알 수 있 습 니 다.원본 코드 를 검사 하려 면 sparse 명령 의 지원 이 필요 합 니 다.
72 # Call a source code checker (by default, "sparse") as part of the
73 # C compilation.
74 #
75 # Use 'make C=1' to enable checking of re-compiled files.
76 #
77 # See the linux kernel file "Documentation/sparse.txt" for more details,
78 # including where to get the "sparse" utility.
79
80 ifdef C
81 ifeq ("$(origin C)", "command line")
82 CHECKSRC := $(C)
83 endif
84 endif
85 ifndef CHECKSRC
86 CHECKSRC = 0
87 endif
88 export CHECKSRC
7. 다섯 번 째 단계 의 BUILD 판단DIR 이 비어 있 는 지, 비어 있 지 않 은 지 여부
90 ifneq ($(BUILD_DIR),)
91 saved-output := $(BUILD_DIR)
92
93 # Attempt to create a output directory.
94 $(shell [ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR})
95
96 # Verify if it was successful.
97 BUILD_DIR := $(shell cd $(BUILD_DIR) && /bin/pwd)
98 $(if $(BUILD_DIR),,$(error output directory "$(saved-output)" does not exist))
99 endif # ifneq ($(BUILD_DIR),)
90: 예 를 들 어 BUILDDIR 이 비어 있 지 않 으 면 후속 동작 을 합 니 다.93 ~ 94: 판단 BUILDDIR 이 존재 하 는 지 여부 입 니 다. 존재 하지 않 는 다 면 이 폴 더 를 만 듭 니 다.
97 ~ 99: 폴 더 가 만 들 어 졌 는 지 확인 합 니 다.오류 정 보 를 출력 하 는 데 성공 하지 못 했 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.