make 명령의 m 옵션, makefile
make -C ~/kernel-2.6 M=`pwd` modules
위 줄에 있는 M='pwd'의 의미는 무엇입니까?
설명을 이해할 수 없었습니다.
M= 옵션을 사용하면 모듈 대상을 만들기 전에 파일을 모듈 소스 디렉토리로 다시 이동할 수 있습니다.
좀 더 확실하게 말씀해 주시겠습니까?
M
에 대한 옵션이 아닙니다.make
. 하이픈이 부족하다는 것을 주목하세요.M
는 의 실행에 할당된 변수입니다.make
.한다면make
실행하다, 실행.Makefile
스크립트, 이 스크립트는 변수를 읽을 수 있습니다.M
그 내용물을 사용합니다.
당신이 제공하는 예에서,make
읽을 것입니다Makefile
인에~/kernel-2.6
현재 작업 디렉토리를 변수에 할당합니다.M
. 일반적으로, 이것은 다음을 허용할 것입니다.make
처리 후 현재 디렉토리로 돌아가기Makefile
.
저도 비슷한 퀴즈를 냈습니다.
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
여기서 make는 내 프로젝트의 디렉토리 내에서 호출됩니다.-C
is make option:
-Cdir, --directory= makefile을 읽거나 다른 작업을 하기 전에 디렉토리 dir로 dir합니다.여러 개의 -C 옵션이 지정된 경우 각각은 이전 옵션과 상대적으로 해석됩니다. -C / -C 등은 -C / 등과 같습니다.이것은 일반적으로 make의 재귀적 호출과 함께 사용됩니다.
M
make option이 아니라 인수가 전달됩니다.부터-C
변경사항은 우리가 알고 있는 디렉토리를 만듭니다. 그 디렉토리에서 make 파일을 읽을 것입니다.그 디렉토리에 있는 make file을 검사함으로써 나는 그것이 무엇을 하고 있는지를 발견했습니다.M
:
From make file (Makefile) 가 가리키는 디렉토리의 Make file (이름은 Makefile)-C
(커널 빌드 디렉토리라고 btw함):
# Use make M=dir to specify directory of external module to build
# Old syntax make ... SUBDIRS=$PWD is still supported
# Setting the environment variable KBUILD_EXTMOD takes precedence
ifdef SUBDIRS
KBUILD_EXTMOD ?= $(SUBDIRS)
endif
Linux Device Drivers, 3rd Edition, Jonathan Corbet 등의 설명:
이 명령은 디렉터리를 -C 옵션이 제공된 디렉터리(즉, 커널 소스 디렉터리)로 변경하는 것으로 시작합니다.거기서 커널의 최상위 makefile을 찾습니다.M= 옵션을 사용하면 모듈 대상을 만들기 전에 파일을 모듈 소스 디렉토리로 다시 이동할 수 있습니다.
다음에 대한 설명서를 읽습니다.make
:
-C dir, --directory=dir
Change to directory dir before reading the makefiles or doing anything else.
호출하면 디렉토리가 다음으로 변경됩니다.~/kernel
그리고 효과적으로 전화를 걸었습니다.make
그곳, 즉 읽기.Makefile
그 디렉토리에서.위드 더M
변수, makefile은 실제 프로젝트 파일이 어디에 있는지 알고 그 위치로 다시 변경할 수 있습니다.
요점은 당신이 직접 makefile을 작성하는 것이 아니라, 한 번에 한 번뿐인 버전을 사용한다는 것입니다.
다른 답들은 대부분 맞지만, 저는 여러분에게 그것을 배우는 방법을 알려주고 싶습니다.
M
옵션이 아닙니다.M
가 의 변수입니다.Makefile
- 그래서 우리는 그것을 읽어야 합니다.
Makefile
전화번호부에make -C
로 바뀝니다.
만들기 파일을 읽어 보십시오. 댓글이 몇 개 없습니다.
# Use make M=dir to specify directory of external module to build
# Old syntax make ... SUBDIRS=$PWD is still supported
# Setting the environment variable KBUILD_EXTMOD take precedence
ifdef SUBDIRS
KBUILD_EXTMOD ?= $(SUBDIRS)
endif
ifeq ("$(origin M)", "command line")
KBUILD_EXTMOD := $(M)
endif
검색할 수 있습니다.KBUILD_EXTMOD
:
VPATH := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))
module-dirs := $(addprefix _module_,$(KBUILD_EXTMOD))
그 알맹이는 그런 식입니다.Makefile
나무 밖의 소스를 구축할 수 있습니다.
외부 모듈을 만드는 명령은 다음과 같습니다.
$ make -C <path_to_kernel_src> M=$PWD
kbuild 시스템은 명령에 주어진 "M=" 옵션으로 인해 외부 모듈이 제작되고 있음을 알고 있습니다.
실행 중인 커널에 기반하여 빌드하려면 다음을 사용합니다.
$ make -C /lib/modules/`uname -r`/build M=$PWD
유닉스 셸에서 쓰기`foobar`
명령의 중간에는 "명령을 실행하라"는 의미가 있습니다.foobar
여기에 출력물을 대체합니다."
포함해서M=`pwd`
make
명령은 "run the"를 의미합니다.pwd
명령어는 현재 작업 디렉토리를 인쇄하고 설정합니다.M
그 값에 대한 변수."
언급URL : https://stackoverflow.com/questions/20301591/m-option-in-make-command-makefile
'it-source' 카테고리의 다른 글
왼쪽에서 여는 각도 부트스트랩 드롭다운 (0) | 2023.10.28 |
---|---|
부모 활동으로 올바르게 돌아가려면 어떻게 해야 합니까? (0) | 2023.10.28 |
왼쪽 자체 가입은 '기본'당 하나의 행을 반환합니다. (0) | 2023.10.23 |
두 날짜 사이의 시간 차이(시간 단위)를 구하는 방법 (0) | 2023.10.23 |
AJAX 호출 데이터를 반환하는 자바스크립트 함수 (0) | 2023.10.23 |