영어프랑스어스페인어

Ad


온웍스 파비콘

makepp_variables - 클라우드에서의 온라인

Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터를 통해 OnWorks 무료 호스팅 제공업체에서 makepp_variables를 실행하세요.

Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 제공업체에서 실행할 수 있는 makepp_variables 명령입니다.

프로그램:

이름


makepp_variables -- makepp에서 변수를 사용하는 방법

기술


?: $*,
$+,
$/,
$<,
$?,
$@,
$^,
=,
!=,
&=,
+=,
:=,
;=,
?=, A: 아칸소,
ARFLAGS,
같이, C: DC,
CFLAGS,
"변경_종속성",
변경_입력,
커디르,
CXX,
CXX플래그, D: "종속성",
"의존", F: F77,
FC,
"각각", I: 입력,
입력, L: LD,
법률,
리툴, M: 만들다,
MAKECMDGOALS,
메이크플래그,
메이크인포,
MAKEPP_DEBUG,
메이크플래그,
_MAKEPPFLAGS,
MAKEPP_LN_CP,
"makepp_percent_subdirs",
"makepp_require_phony",
makepp_signature_C_Flat,
"makepp_simple_concatenation",
MAKEPP_버전, O: "산출",
"출력", P: 펄,
장애인, R: NS,
뿌리, S: 껍데기,
"정렬_종속성",
정렬_입력,
"줄기", T: 표적,
목표 V: VPATH, Y: YACC

Makefile은 일반적으로 여러 곳에서 변수를 사용합니다. 사용하는 중요한 이유 중 하나
변수는 정보가 makefile의 한 위치에만 포함되도록 보장하는 것입니다.
변경되는 경우 정보의 두 사본이 유출될 위험이 없습니다.
동조.

변수 이름은 대소문자를 구분합니다. 이론적으로 변수 이름은 여러 가지로 만들어질 수 있습니다.
그러나 makepp는 아마도 당신이 다른 일을 한다면 그것을 이해하지 못할 것입니다.
영숫자 문자, "_" 및 "-".

각 메이크파일에는 고유한 변수 세트가 있으며, 하나의 메이크파일에 변수를 설정하면
다른 메이크파일의 값에는 영향을 미치지 않습니다. 변수를 설정하고 싶다면
많은 메이크파일을 만드는 가장 좋은 방법은 각 메이크파일에 공통 정의를 포함시키는 것입니다.
파일을 작성하거나(include 문 참조) "전역" 변수를 사용하세요.

변하기 쉬운 할당
변수는 여러 가지 방법으로 값을 가정할 수 있습니다.

· makefile 내부에 변수를 설정할 수 있습니다. 할 수 있는 방법은 다양합니다
이것; 아래를 참조하세요.

· 변수의 값은 다음과 같이 명령줄에서 지정할 수 있습니다:

makepp CFLAGS=-O2 my_program

둘 이상의 makefile이 로드되면 CFLAGS 변수가 모든 메이크파일에 전파됩니다.
메이크파일. 명령줄에 설정된 변수는 자동으로 모든 설정을 재정의합니다.
makefile의 변수.

필요한 경우 makefile은 명령줄 설정을 명시적으로 재정의해야 합니다.
사용자의 요청을 무시하려는 의도가 아니라 이를 수정하는 방법입니다.
"재정의" 수정자는 할당문 앞에 올 수 있습니다. 그러나 다음의 경우
키워드 문에서는 순서가 중요하므로 재정의 변형이
항상 아래에 표시됩니다. "재정의" 수정자는 해당하는 모든 할당에만 적용됩니다.
존재하며 나중에 변수에 할당하는 데 영향을 주지 않습니다.

· 환경에 변수가 설정되어 있으면 makepp 변수로 참조할 수 있습니다.
일반적으로 makefile 내부의 변수에 대한 할당은
환경이지만 "-e" 또는 "--environment-overrides"를 사용하여 이를 변경할 수 있습니다.
명령 행 옵션.

변수는 다음과 같은 여러 할당 표현식 중 하나로 할당됩니다.

X = 1
모듈 := abcd
CC ?= gcc
CFLAGS += -벽
VAR 정의
var 라인 1
var 라인 2
엔드 데프
내보내기 PATH := $(PWD):$(PATH)
global MYPROJECT.INFO = 모든 makefile에 표시되는 정보

값 주위의 앞뒤 공백은 항상 제거됩니다.

서로 다른 할당 연산자는 다소 다른 의미를 갖습니다.

단순, 간단, 편리 할당 운영자

=
변수 = 텍스트 문자열
VARIABLE = 텍스트 문자열 재정의

이것은 모든 구현이 지원하는 일반적인 할당문입니다. 그만큼
오른쪽의 표현식은 "$(VARIABLE)" 값이 계산될 때까지 평가되지 않습니다.
실제로 어딘가에 사용되었습니다. 따라서 다음을 수행하면:

X = 1
와이 = $(엑스)
X = 2

그런 다음 makefile의 뒷부분에 있는 "$(Y)"는 "2"로 평가됩니다.

일반적으로 "=" 대신 ":="(아래 참조)를 사용하는 것이 좋습니다.
보다 예측 가능한 변수 평가를 제공합니다. 하지만, 필요할 때가 있습니다.
변수 평가를 연기합니다. 또한, makefile을 작성하는 경우
GNU make 이외의 일부 make 버전과 역호환되는 경우에는 더 이상 사용할 수 없습니다.
선택: "="만 사용할 수 있습니다.

:=
변수 := expr
변수 재정의 := expr

이는 오른쪽이 평가된다는 점을 제외하면 "VARIABLE = expr"과 동일합니다.
임무를 수행하는 동안 단번에. 따라서 만약

X := 1
Y := $(엑스)
X := 2

그러면 메이크파일의 "$(Y)"는 "1"로 평가됩니다. 왜냐하면 그것이 "$(X)"였기 때문입니다.
"$(Y)"가 정의되었을 때.

;=
변수 ;= expr
VARIABLE 재정의 ;= expr

이는 오른쪽이 평가된다는 점을 제외하면 "VARIABLE := expr"과 동일합니다.
처음 사용할 때만 기억됩니다. 고가의 경우 유용합니다.
항상 같은 값을 반환하지만 다음과 같은 경우에는 수행하고 싶지 않은 명령
관련 없는 타겟 구축:

VAR1 ;= $(perl 비용이 많이 드는 계산)
VAR2 ;= $(쉘 외부 명령)

이전 makefile은 일반적으로 여기서 ":="를 사용하여 이 작업을 최소한 한 번만 수행한다는 점에 유의하십시오.
하지만 이 연산자를 사용하면 현재 수행하지 않는 경우 추가로 수행하지 않을 수도 있습니다.
가치가 필요합니다. 여러 디렉터리에서 동일한 값의 경우 다음을 수행할 수 있습니다.
아래에서 설명하는 "글로벌"을 사용하여 이를 더욱 최적화합니다.

그러나 이는 평가 순서를 강제하는 영리한 방법이 아닙니다. 만약
이렇게 정의된 변수에는 다른 변수의 값이 포함되며, 그 다른 변수에는
타겟 특정 값이 있고 첫 번째 확장은 해당 타겟에 대한 것이고 그 다음에는
대상 특정 값은 다른 모든 컨텍스트에도 적용됩니다. 이건 버그이고
앞으로는 수정되길 바랍니다.

+=
변수 += expr
VARIABLE += expr 재정의

변수의 이전 내용에 문자열을 공백으로 구분하여 추가합니다. 만약에
변수는 이전에 ":="로 할당된 다음 오른쪽이 평가됩니다.
추가하기 전에.

&=
변수 &= expr
VARIABLE &= expr 재정의

공백으로 구분하여 변수의 이전 내용 앞에 문자열을 추가합니다.
변수가 이전에 ":="로 할당된 경우 오른쪽은 다음과 같습니다.
추가하기 전에 평가됩니다.

예를 들어 사용자가 무엇을 입력하든 "CFLAGS"를 보장하는 한 가지 방법은 다음과 같습니다.
항상 "-Wall"로 시작합니다. 다음 두 줄은 다음과 같습니다.

CFLAGS = -O2 # 명령줄에서 재정의되었을 수 있음
CFLAGS &= -Wall 재정의 # 무조건 앞에 추가됨

예전 메이크파일에서는 일반적으로 다음과 같은 작업을 수행해야 했습니다.
끝없는 재귀를 방지하기 위해 유형을 ":="로 강제하는 효과:

변수 := expr $(변수)

?=
변수 ?= expr
override VARIABLE ?= expr # 쓸모는 없지만 적법합니다

변수의 값을 설정합니다. 단, 변수가 이전에 지정되지 않은 경우에만 해당됩니다.
makefile, 명령줄 또는 환경에서. 위 과제는
정확히 동일

ifndef 변수
변수 = expr
ENDIF

!=
변수 != 쉘 명령
VARIABLE != 쉘 명령 무시

쉘 명령을 실행하고 명령의 표준 출력을 포함하도록 변수를 설정합니다.
이것은 정확히 동일합니다.

변수 := $(쉘 명령)

여러 줄 변수

"define" 문은 위의 간단한 문과 여러 줄로 동일합니다. 그만큼
변수 뒤의 연산자는 선택 사항입니다. 누락된 경우 "VARIABLE 정의"와 동일합니다.
=". "&=" 및 "+=" 연산자는 여기서 약간 다릅니다.
공백이 아닌 줄바꿈을 사용하여 이전 값을 반환합니다. 외에는 아무것도 없어야합니다.
명령문 뒤에 주석을 추가합니다. 즉, 값은 다음 줄에서 시작됩니다.

변수 정의 :=
변수 값의 첫 번째 줄
변수 값의 두 번째 줄
변수 값의 세 번째 줄
엔데프

재정의 정의 변수
...
엔드 데프

"정의" 앞의 키워드는 "내보내기" 또는 "글로벌" 중 하나의 조합일 수 있으며
"우세하다".

줄바꿈을 포함하기 위해 변수 값이 필요한 경우 다음과 같이 "define" 문을 사용해야 합니다.
표시됩니다(또는 Perl에서 직접 값을 할당할 수 있습니다). ("endef"가 선택되었습니다.
GNU make와의 호환성. "enddef"를 사용할 수도 있습니다.) 이는 주로 다음과 같은 경우에 유용합니다.
"미리 준비된 명령 시퀀스", 예를 들어 다음과 같습니다.

COMPILE_C_PROGRAM 정의
@&echo "$(input) 컴파일 중"
@$(CC) $(CFLAGS) $(CPPFLAGS) $(포함) -c $(입력) -o $(출력)
엔데프

그런 다음 다음과 같이 여러 규칙에서 이 여러 줄 변수를 사용할 수 있습니다.

%.o : %.c
$(COMPILE_C_PROGRAM)

$(ARCH)/%.o : $(ARCH)/%.c
$(COMPILE_C_PROGRAM)

개행 문자 대신 세미콜론을 사용하면 동일한 효과를 얻을 수 있는 경우가 많습니다.
쉘은 이를 명령 구분 기호로도 해석하기 때문입니다. 예를 들어,

COMPILE_C_PROGRAM = @echo "$(input) 컴파일 중"; \
$(CC) $(CFLAGS) $(CPPFLAGS) $(포함) -c $(입력) -o $(출력)

세미콜론이 Perl을 강제로 쉘에 전달한다는 점을 제외하면 동일한 효과가 있습니다.
명령을 직접적이고 더 효율적으로 실행하는 대신. 그것도 각각 넣어야지
자체 라인에 내장되어 있으므로 외부 에코로 전환해야 함을 의미합니다.
세미콜론 케이스.

"define" 내에서 확장할 때 한 가지 전문 분야가 있습니다. 즉, "define X :=" 또는
이미 ":=", "define X &=" 및 "define X +="인 변수입니다. 이 경우에는
"$(shell command ...)" 또는 내장된 "$(&command ...)"는 개행 문자를 다음으로 변환하지 않습니다.
공백

내보내기 변수 하위 프로세스

VAR 내보내기 ...
내보내기 VAR = 값
내보내기 VAR += 값 재정의

첫 번째 형식은 어떤 값을 사용하든 하위 프로세스로 내보내기 위해 지정된 변수를 표시합니다.
그런 다음 변수가 있습니다. 하나의 변수에만 적용되는 두 번째 형식은 추가로
즉시 값을 할당합니다. 할당의 모든 변형이 허용됩니다.

공유 변수 가로질러 메이크파일

글로벌 VAR ...
전역 VAR = 값
전역 VAR &= 값 재정의

첫 번째 형식은 지정된 변수를 모든 makefile에 대한 전역 변수로 표시합니다. 만약 그들 중 누구라도
이미 값이 있으면 해당 값은 makefile 로컬 변수에서 전역 변수로 이동됩니다.
하나. 그러나 이 명령문이 표시되는 시점에 다른 메이크파일에는 이미
그 중 하나에 대한 값이 있으면 해당 makefile은 전역 메이크파일을 볼 수 없습니다.

하나의 변수에만 적용되는 두 번째 형식은 오른쪽에 값을 추가로 할당합니다.
떨어져 있는. 할당의 모든 변형이 허용됩니다. ":="가 바로 확장됩니다.
로컬 makefile의 값에. 반대로 "=" 변수는 다음으로 확장됩니다.
사용 시점의 가치.

전역 변수는 다루기가 까다로울 수 있습니다. 왜냐하면 makepp는 어떤 위치에서든 makefile을 로드할 수 있기 때문입니다.
규칙이나 메이크파일이 로드되지 않은 일부 대상을 빌드해야 할 필요성이 발생하기 때문입니다.
이러한 이유로 다음을 갖는 것이 좋습니다. RootMakepp 파일 명시적으로 모두 로드하려면
"load-makefile"을 사용하여 변수를 수정하거나 사용하는 다른 것.

전역 GLIBLIBS ;= $(shell pkg-config --libs glib-2.0)

또한 귀하의 프로젝트는 언젠가 다른 프로젝트와 함께 구축될 수도 있습니다. 이를 위해
따라서 항상 프로젝트 이름을 전역 변수 이름의 일부로 만드는 것이 좋습니다.

타겟별 할당

대상: VARIABLE = 문자열
대상: VARIABLE := 문자열
대상: VARIABLE += 문자열 재정의

변수의 대상별 값을 설정합니다. 타겟별 값이 적용됩니다.
주어진 목표를 생성하는 행동에서. 이는 주로 다음과 같은 용도로 사용됩니다.
이:

CFLAGS := -O2

my_prog: 파일1.o 파일2.o 특수파일.o

Special_file.o : CFLAGS := -g

%.o: %.c
$(CC) $(CFLAGS) -c $(입력) -o $(출력)

여기서 일어나는 일은 모든 ".c" 파일이 최적화("-O2")로 컴파일된다는 것입니다.
디버그 모드("-g")에서 컴파일되는 "special_file.c". 이 방법은 편리한 방법입니다.
몇 개의 파일에만 다른 컴파일 옵션을 지정합니다.

이와 같은 대상별 변수 할당은 규칙의 작업에만 적용됩니다. 그들
규칙의 대상이나 종속성을 평가할 때는 적용되지 않습니다. 규칙이라면
둘 이상의 대상이 있는 경우 대상별 변수 할당은 다음에서만 가져옵니다.
먼저 표적. 또한 makepp의 타겟별 변수는 약간 다릅니다.
언급된 하나의 파일에 대한 규칙에만 적용되고 다른 파일에는 적용되지 않는다는 점에서 GNU make의 것입니다.
그 전임자 중 하나.

와일드카드 확장은 대상에서 수행되므로 다음과 같이 할 수 있습니다.

test_*.o : CFLAGS += -DTEST

GNU make와의 호환성을 위해 "*" 대신 "%"를 사용할 수 있습니다.

변하기 쉬운 치환
Makepp의 변수 대체 규칙은 다른 브랜드의 규칙과 유사하지만 다소
더 강력한. 모든 브랜드와 마찬가지로 "$(CC)" 또는 "${CC}"는 모두 해당 브랜드의 가치를 나타냅니다.
가변 CC. 문자 그대로 달러 기호가 필요한 경우 다음과 같이 이중 달러 기호($$)를 입력하세요.
이:

대상: dep1 dep2 dep3 dep4
&rm -f $(출력)
$(inputs)의 파일에 대해; do cat $$file >> $(output); 완료

추가적으로 makepp에는 "$[VARIABLE]" 구문이 있는데, 이는 다른 구문과 동일한 작업을 수행합니다.
두 개, 하지만 makepp가 다른 것을 찾기 전에. 이를 통해 완전한 규칙에 사용할 수 있습니다.
및/또는 조건부:

Bracket_rule 정의 =
ifdef SOME_VAR
까치발:
&echo 이것은 규칙입니다 -o $(출력)
ENDIF
엔드 데프

$[괄호_규칙]

RC 스타일 치환

기본적으로 makepp는 rc 스타일 대체를 사용합니다.
rc 쉘). 이는 다음 예를 통해 가장 잘 설명됩니다.

모듈 = abcd

mylib.a : module_dir/$(MODULES).o $(OTHER_OBJECTS)
$(CXX) $(종속성) -o $(대상)

MODULES의 각 단어 앞에는 접두사 "module_dir/"이 붙고 접미사 ".o"는 다음과 같습니다.
각 단어에 첨부됩니다.

단어 목록을
변하기 쉬운; 구문은 "$( word1 word2)"입니다. 괄호와 괄호 사이의 공백을 확인하세요.
첫번째 단어. 따라서 위의 예는 다음과 같이 작성될 수 있습니다.

mylib.a : module_dir/$( abcd).o $(OTHER_OBJECTS)
$(CXX) $(종속성) -o $(대상)

변수는 두 개 이상의 단어가 있는 경우에만 rc 스타일 대체를 제공합니다.
한마디로 전통메이크업과 같습니다. 아아, 변수가 비어 있으면
갈등. Traditional에서는 단순히 빈 문자열로 확장합니다. 하지만 생각해보면
목록으로 사용하려면 "-I$(DIRLIST)"가 사라지고 외로운 "-I"가 표시되지 않기를 원할 것입니다. 그만큼
해결책은 공백으로 시작하는 목록으로 포장하는 것입니다. "-I$( $(DIRLIST))" 는
목록에 있는 단어만큼 많은 옵션이 있습니다.

단어 배열로 확장되는 동일한 단어에 여러 변수를 넣으면 rc 스타일
대체는 실제로 데카르트 곱을 사용하므로 다음과 같은 작업을 수행할 수 있습니다.
당신이 원하는 :

DIRS = s1 s2
모듈 = abc
접미사 = .o .c
파일 := $(DIRS)/$(모듈)$(접미사)

FILES에는 문자열이 포함됩니다.

s1/ao s1/ac s1/bo s1/bc s1/co s1/cc s2/ao s2/ac s2/bo s2/bc s2/co s2/cc

공백 외에도 rc 스타일 대체는 따옴표, 원형, 곱슬 또는 사각형에서 중지됩니다.
괄호 및 ", : ; = # @" 중 하나. 이는 놀라운 일이 될 수 있으며 다시 한 번 필요합니다.
명시적인 목록. 모든 디렉토리에서 와일드카드로 헤더를 찾고 싶다고 가정해 보겠습니다.
대문자로 시작:

불량 := [AZ]*/**/*.$( hpp h) # [AZ]*/**/*.hpp */**/*.h
좋음 := $( [AZ]*/**/*.)$( hpp h) # [AZ]*/**/*.hpp [AZ]*/**/*.h

rc 스타일 대체가 방해가 되거나 선행 또는 후행이 필요한 경우
make 변수에 공백을 추가하면 설정하여 rc 스타일 대체를 끌 수 있습니다.
변수 "makepp_simple_concatenation=1". 명령으로 전역적으로 끌 수 있습니다.
라인 또는 환경 변수로. 또는 makefile별로 변수를 설정하여
당신의 메이크파일. makefile 상단 근처에서 이 작업을 수행해야 합니다. 그렇지 않으면 다음과 같은 문제가 발생할 수 있습니다.
일부 평가에는 rc 스타일 대체가 사용되고 다른 평가에는 사용되지 않는 재미있는 상황입니다.
(할당 전에 평가된 모든 표현식은 rc 스타일 대체를 사용하며 모든 표현식은
이후에 평가된 표현식은 그렇지 않습니다. 표현식 평가 이후
makefile은 복잡하고 명령문의 순서가 항상 명확하지는 않습니다.
makefile의 경우 "makepp_simple_concatenation"을 최대한 빨리 설정하는 것이 가장 좋습니다.)
하나의 대상에 대해서만 설정해도 됩니다.

대상: makepp_simple_concatenation = 1
표적:
&echo before_first$(LIST)after_last -o $(출력)

"$[VARIABLE]"은 "$(VARIABLE)"보다 먼저 평가되므로 rc-
대체는 명시적으로 래핑하지 않는 한 예상할 수 있는 결과를 제공하지 않습니다.
명부:

A = ab
N = 1
나쁨 := $(A)$[N]
좋음 := $(A)$( $[N])

마지막 줄은 다음과 같이 읽혀집니다.

나쁨 := $(A)1 2 # a1 b1 2
좋은 := $(A)$( 1 2) # a1 a2 b1 b2

치환 참고자료

대체 참조의 형식은 "$(VAR:A=B)"입니다. 여기서 A는 일치시킬 패턴이고 B는
대체할 패턴입니다. 대체 참조는
"patsubst" 기능. 예를 들어:

source_files = ac bc cc dc
object_files = $(source_files:%.c=%.o)

"$(object_files)"를 "ao bo co do"로 설정합니다. "%"는 특수 문자와 일치합니다.
임의의 문자열. A와 B 모두 "%"로 시작하는 경우 교체 시 흔히 발생하는 현상
접미사는 생략할 수 있습니다.

object_files = $(source_files:.c=.o)
object_files = $(source_files:c=o) # 동일합니다. 왜냐하면 . 특별하지 않다

공백 in 변수

변수의 공백을 제어해야 하는 경우 (현재) rc-style을 비활성화해야 합니다.
대체("makepp_simple_concatenation=1" 설정)하고 다음과 같은 구문을 사용합니다.

널 =
T = -o $(널)

또는 빈 평가를 사용하여:

티 = -오 $()

이렇게 하면 변수 "T"에는 "-o"와 공백이 포함됩니다.

공백을 처리하는 이러한 종류의 기술은 권장되지 않습니다. 변수가 필요한 경우
공백을 포함하는 makefile에서 수행 중인 작업에 대해 진지하게 생각해야 합니다.
공백을 처리해야 하는 경우 일반적으로 Perl 코드를
makefile을 처리하거나("perl_begin" 또는 "sub" 문 사용) 이를 처리하기 위해
규칙 작업의 쉘 문에서.

이러한 경우는 일반적으로 사람들이 서로 다른 용도로 동일한 규칙을 사용하려고 할 때 발생합니다.
일반적인 Unix 명령 구문을 사용하지 않는 아키텍처. 예를 들어, 가끔 본다.
makefile에는 다음과 같은 것들이 있습니다:

ifeq($(ARCH),weirdarch)
O := /출력=
그렇지 않으면
널 :=
O := -o $(널)
ENDIF

%.o : %.c
$(컴파일러) $(입력) $(O)$(출력)

정말로 원한다면 makepp를 사용하여 이 작업을 수행할 수 있지만 아마도
덜 복잡한 변수가 있으면 makefile을 훨씬 더 읽기 쉽습니다.
대체, 예:

ifeq($(ARCH),weirdarch)
%.o : %.c
$(WEIRD_COMPILER) $(입력) /OUTPUT=$(출력)
그렇지 않으면
%.o : %.c
$(CC) -c $(입력) -o $(출력)
ENDIF

변수 이름에는 공백이 허용되지 않으며 해당 값에만 공백이 허용됩니다. 이건 다르다
일부 구현에서.

Automatic 변수
자동 변수는 규칙에 따라 다른 값을 가정하는 변수입니다.
그것들은 평가됩니다. Makepp은 다른 자동 변수의 대부분을 지원합니다.
make use 버전. 게다가 대부분의 경우 덜 비밀스럽고 긴 이름을 갖고 있습니다.
대신 사용할 수 있습니다. (이러한 이름을 재정의하는 레거시 makefile의 경우
makefile의 정의는 기본 의미를 재정의합니다. 예를 들어, 다음과 같이 말하면
makefile에 "target = abc"가 있으면 "$(target)"은 항상 "abc"로 확장되며
더 이상 $@와 동일합니다.)

다음은 makepp이 지원하는 모든 자동 변수의 전체 목록입니다.

출력
목표
$@ 현재 규칙의 대상입니다. 실제로 makepp은 여러 대상을 지원하므로
어떤 규칙이든 이것이다 먼저 표적. 예를 들어, 다음 규칙에서

y.tab.c y.tab.h : 파서.y
$(YACC) -o $(출력) $(YFLAGS) $(입력)

"$(output)"에는 값이 포함됩니다. y.tab.c. 이러한 마법의 변수는 실제로
함수의 경우 인덱스를 인수로 전달할 수도 있습니다. 1부터 그 뒤로 계산됩니다.
-1부터. 따라서 "$(output 2)" 또는 "$(output -1)"에는 값이 포함됩니다. y.tab.h.

이 변수의 세 가지 형태는 모두 동일한 값을 갖지만 차이점이 있습니다.
다중 대상 규칙에 대한 해석. 예전 스타일의 비밀스러운 이름 $@을 사용하는 경우,
makepp은 이를 현대적인 규칙이 아닌 구식 규칙 세트로 해석합니다.
한 번에 모든 대상을 생성합니다.

ab: # 정말로: a와 b에 대해 각각 하나의 규칙
$@을 터치하세요.

cd: # 오류: mpp는 d가 빌드되지 않았다고 불평합니다.
$(출력)을 터치하세요.

출력
목표
현재 규칙의 모든 대상입니다. 둘 이상이 아닌 한 "$(target)"과 동일
표적. 위의 예에서 "$(outputs)"는 y.tab.c y.tab.h가 됩니다. 당신은
인덱스 목록이므로 "$(outputs 2 1)"은 y.tab.h y.tab.c가 됩니다.

의존
입력
$< 규칙의 첫 번째 명시적 종속성입니다. 예를 들어 이 규칙에서는

%.o : %.c
$(CC) $(CFLAGS) -c $(입력) -o $(출력)

"$(input)"은 .c 파일, 무엇이든 관계없이 .h 파일 makepp
발견합니다. 둘 이상의 종속성을 지정하는 경우 다음을 전달하여 해당 종속성을 가져올 수 있습니다.
index: "$(input $(INDEX))"는 INDEX번째 종속성입니다.

의존성
입력
$^ 다음을 제외한 대상의 모든 명시적 종속성 .h 에서 발견한 파일
포함을 위한 makepp_scanning.

예를 들어, 규칙에서

myprog.o : *.o
$(CC) $(CFLAGS) $(입력) -o $(출력)

"$(inputs)"는 디렉토리의 모든 .o 파일이 됩니다. 당신은 당신이 원하는 것만 선택할 수 있습니다
인덱스 목록을 전달하여 원합니다. 다른 종류의 파일을 명시적으로 지정하는 경우
"$(inputs 2 3 4)"와 같이 선택할 수 있습니다(그러나 와일드카드를 사용하면 이는 너무
유망).

sorted_dependents
sorted_inputs
$+ 중복 항목이 제거된 대상의 모든 종속성이 정렬된 순서로 표시됩니다.
"$(sort $(inputs))"와 동일합니다.

변경_종속성
변경_입력
$? 변경된 대상의 종속성입니다. 여기에는 명시적인 내용만 포함됩니다.
암시적으로 발견되지 않은 종속성(즉, makefile에 나열한 것)
검사의 종속성(예: .h 파일)

이는 일반적으로 다음과 같은 명령에 사용됩니다.

libmine.a : $(MODULES) : build_checkignore_action
$(AR) 루 $@ $?

즉, ar 변경된 모듈만 교체하라는 메시지가 표시됩니다. (참고
"ignore_action" 빌드 확인 규칙. 이를 지정하지 않으면 makepp는
변경될 때마다 실행되는 작업입니다. 종속성이 변경되지 않은 경우
작업 문자열은 "ar ru libmine.a"가 될 것입니다. 이는 아마도 이전과 다를 것입니다.
지난번에 실행했으므로 "ignore_action" 없이 makepp가 실행합니다. 이에
경우에는 무해하지만 다른 명령을 사용하면 문제가 될 수 있습니다. 보다
"ignore_action"에 대한 자세한 내용은 makepp_build_check를 참조하세요.)

이와 같은 아카이브를 구축하면 빌드 횟수가 줄어들기 때문에 좋은 생각이 아닙니다.
믿을 수 있는. 문제는 아카이브를 빌드한 다음 다음 중 하나를 제거한다는 것입니다.
MODULES 목록의 모듈은 여전히 ​​아카이브에 있으며
메이크업

줄기
$* 패턴 규칙의 어간(즉, '%'가 일치하는 모든 것). 대안적으로, 만약 이것이
패턴 규칙이 아닌 경우 확장자 없이 파일 이름을 반환합니다(예:
"$(기본 이름 $(입력))"과 동일합니다.

이는 주로 이전 버전과의 호환성을 위한 것입니다. 예를 들어 이전 버전의 make에서는
컴파일 방법을 알려주는 유일한 방법 .c 해당 파일에 파일을 .o 파일은 다음과 같았습니다
이:

.co:
$(CC) $(CFLAGS) -c $*.c -o $*.o

이것은 규칙을 작성하는 형편없는 방법입니다. GNU-make 스타일을 사용하는 것이 훨씬 더 명확합니다.
패턴 규칙은 다음과 같습니다.

%.o : %.c
$(CC) $(CFLAGS) -c $(입력) -o $(출력)

각각
"foreach" 절의 현재 파일 이름입니다. "foreach" 절은 거의 사용되지 않습니다.
하지만 makepp이 지원하는 가장 일반적인 종류의 패턴 규칙입니다. 을 위한
예,

#
# 일종의 특수 전처리기를 사용하여 .c 파일을 빌드합니다.
#
%.c : %.k
$(전처리기) $(입력) > $(출력)

#
# .c 파일을 .o 파일로 컴파일합니다:
#
%.o : %.c
$(CC) $(CFLAGS) -c $(입력) -o $(출력)

#
# 파생된 .c 파일에 대한 특수 대체 컴파일 플래그
# .k 파일에서:
#
$(foreach:%.k=%.o) : $(foreach:%.k=%.c) : foreach *.k
$(CC) $(SPECIAL_K_FLAGS) -c $(입력) -o $(출력)

자세한 내용과 예는 규칙의 foreach 절에 대한 설명서를 참조하세요.

$/ 이는 기본적으로 "/" 또는 기본 Windows의 "\" 상수입니다. 필요하다면
예를 들어 현재 디렉터리에 만든 프로그램과 같이 프로그램을 이식 가능하게 시작하려고 합니다.

내 출력:
.$/myprog >$(출력)

인수로 전달된 파일 이름의 경우 Windows가 Unix를 처리할 수 있으므로 필요하지 않습니다.
거기 구문.

선택권 변수
위에서 설명한 모든 방법으로 이를 설정할 수 있습니다(달리 명시된 경우 제외).
Makepp의 바하비어. 기본적으로 모두 정의되지 않습니다.

MAKEPP_DEBUG
makepp를 호출하기 전에 이것을 true 값으로 내보내면 더 많은 디버깅을 얻을 수 있습니다.
정보. 이는 아래에서 적용되는 동안 빌드된 파일의 "RULE_SOURCE"입니다.
makeppinfo, mppi 및 변수 확장 및 규칙 일치에 대한 세부 정보
makepplog, mppl. makepp에 메모리가 부족하거나 중단되는 경우도 표시됩니다.
동일한 변수를 끝없이 확장하고 있기 때문입니다.

A = $A # 지연된 평가, 필요 :=
B = $C
씨 = $B

MAKEPP_LN_CP
&ln 아래의 참고 사항을 참조하세요.

makepp_percent_subdirs
대상 또는 종속 항목의 "%"가 일치하도록 하려면 이를 실제 값(예: 1)으로 설정하세요.
둘 이상의 디렉터리에 걸쳐 있습니다.

makepp_require_phony
암묵적인 허위를 방지하려면(예: 규칙이
목표를 생성하지 않고 성공합니다). 이 변수는 기본적으로 true여야 합니다.
깨진 종속성 체인을 방지하지만 이전 버전과의 호환성이 손상됩니다.
조잡한 makefile.

makepp_signature_C_Flat
이는 C 서명에 대한 옵션입니다. 이를 실제 값(예: 1)으로 설정하여
평면화된 소스, 즉 모든 줄 바꿈(전처리기 문 주변 제외)은
공백처럼 처리되며 "#line" 지시문은 무시됩니다.

makepp_simple_concatenation
"rc 스타일 대체"를 방지하려면 이 값을 실제 값(예: 1)으로 설정하세요.


makepp에서 스크립트를 실행하는 데 사용하는 정확한 Perl로 이를 설정할 수 있습니다.
Suite를 사용하여 내보냅니다. 이는 동일한 Perl을 사용하여 하위 스크립트를 실행하는 데 도움이 될 수 있습니다. 이것은
테스트 스위트, 설치 및 재귀 빌드에 주로 유용합니다.

VPATH
이 변수를 일부 값으로 설정하면 암시적으로 "vpath % value"가 호출됩니다.

사전 정의 변수
Makepp에서는 재정의할 수 있는 몇 가지 변수를 미리 정의합니다.

AR 태만: "아르".

아르플래그
태만: "rv".

AS 태만: "처럼".

CC 태만: "gcc", "egcc", "pgcc", "c89" 또는 "cc" 중 첫 번째로 발견되거나 Windows에서 발견됨
추가로 "cl" 또는 "bcc32".

깃발
태만: "$(CC)"가 GNU 컴파일러인 경우 "-g -Wall", 두 Windows 컴파일러 중 하나인 경우
컴파일러는 아무것도 없고 그 외에는 "-g"입니다.

커디르
현재 Makefile이 있는 디렉터리입니다.

씨엑스 태만: "g++", "c++", "pg++", "cxx", "C""C" 또는 "aCC" 중에서 첫 번째로 발견된 항목 또는
Windows에서는 추가로 "cl" 또는 "bcc32"를 사용합니다.

CXX플래그
태만: "$(CXX)"가 GNU 컴파일러인 경우 "-g -Wall", 두 Windows 컴파일러 중 하나인 경우
컴파일러는 아무것도 없고 그 외에는 "-g"입니다.

F77 태만: "f77", "g77" 또는 "fort77" 중에서 처음으로 발견되었습니다.

FC 태만: "$(F77)".

LD 태만: "ld".

LEX 태만: "lex" 또는 "flex" 중에서 첫 번째로 발견된 것입니다.

리툴
태만: "libtool".

MAKE
이 변수는 존재 여부에 따라 두 가지 다른 값을 갖습니다.
"--전통적인 재귀-만들기". Makepp은 이 변수가 사용되는 시기를 인식하고
재귀가 실제로 발생하기 전에도 일부 기능을 끕니다. 이것은 될 수있다
점진적으로 제거하는 동안에는 바람직하지 않으므로 먼저 호출을
기능을 끄지 않는 makepp 특정 "$((MAKE))"입니다. 설정하시면 안됩니다
왜냐하면 그것은 우리의 스마트 재귀 작업을 방해하기 때문입니다.

MAKECMDGOALS
이 변수는 설정되었지만 makepp에서는 사용되지 않습니다. 다음과 같은 경우에만 쿼리하여 작업을 수행할 수 있습니다.
특정 타겟이 요청되었습니다.

태만: 제공된 사용자(또는 재귀 호출)를 명시적으로 대상으로 지정하는 것은 무엇이든 가능합니다.
암시적으로 기본 대상을 빌드하는 경우 비어 있습니다.

ifneq $(특수 대상 필터링, $(MAKECMDGOALS))
# 특수 대상은 현재 명시적인 대상 중 하나입니다.
그렇지 않으면 ifeq $(MAKECMDGOALS)
# 명시적인 대상이 없습니다
ENDIF

MAKEFLAGS(내보내기)
makepp가 호출되는 표준 옵션입니다. 한 글자만 가지고 있는 사람들
형식은 "-" 없이 처음에 결합됩니다(gmake가 선택한 이유는 하늘이 알고 있습니다).
"-"를 삭제합니다).

메이크인포
태만: "메이크인포".

MAKEPPFLAGS(내보냄)
이는 MAKEFLAGS와 동일한 값으로 설정되지만 이 변수가
makepp의 환경.

_MAKEPPFLAGS(내보냄)
POSIX/gmake 호환성에 필요한 makepp 특정 옵션(makepp와 함께 사용)
불렀다. 이는 별도의 변수에 있으므로 레거시 메이크파일은 중단될 수 없습니다.
MAKEFLAGS를 설정 해제하여 호환성을 확보하세요. 이것은 다음으로만 설정됩니다.
"--전통적인 재귀-만들기".

MAKEPP_버전
실행 중인 makepp 버전입니다. 베타 버전인 경우
하이픈 뒤에 YYMMDD와 추가 내부 데이터가 옵니다. "ifdef"에 이것을 사용할 수 있습니다
다른 브랜드로부터 makepp 특정 구성을 숨기려면

태만: "makepp --version"에 표시된 것과 동일한 값

PWD "CURDIR"의 별칭입니다.

RM 태만: "rm -f". 이는 레거시 Makefile을 위한 것입니다. 새로운 것의 경우 바람직하게는
내장된 &rm 명령을 직접 실행합니다. 가짜 깨끗한 규칙을 작성하고 싶다면 다음을 보세요.
대신 "makeppclean -r" 명령을 사용하세요.

ROOT
빌드 시스템의 루트에 대한 상대 경로, 즉 더 위쪽에 있는 디렉토리
"RootMakeppfile(.mk)"이 있습니다. 변수가 없으면 이 변수는 다음과 같습니다.
빈.

SHELL
이 변수는 "내보내는" 경우에만 적용됩니다. 이 경우에는 Shell입니다.
특수 문자가 포함된 내장되지 않은 작업을 실행하는 데 사용됩니다(일반
직접 실행되는 것). Windows Strawberry 또는 ActiveState Perl의 경우
Unix 계열 셸의 경우 대신 SHELL 변수를 "sh"로 끝나는 값으로 설정해야 합니다.
또는 "sh.exe" 전에 makepp에 전화를 겁니다.

태만: "/usr/xpg4/bin/sh"(예: Solaris) 또는 "/sbin/xpg4/sh" 중에서 첫 번째 발견
(예: Reliant Unix) 또는 "/ 빈 / SH".

YACC
태만: "bison -y" 또는 "yacc" 중에서 첫 번째로 발견되었습니다.

변수
변수 값은 일반 Perl 스칼라로 저장되므로 다음에서 직접 액세스할 수 있습니다.
복잡한 조작이 필요한 경우 Perl 코드; makepp_extending을 참조하세요.
자세한 내용은.

Perl에서 전역 변수에 접근하려면 "Mpp::global" 접두사를 붙여야 합니다.
패키지. 실제로 현재 makefile에 아직 존재하지 않는 모든 변수
이 패키지의 할당은 마치 방금 발행한 것처럼 그때부터 전역이 됩니다.
이에 대한 "전역" 설명입니다.

그러나 이러한 직접 액세스는 오류가 발생하기 쉽습니다! 사용자가 이러한 변수를 재정의했을 수 있습니다.
명령줄이나 환경을 통해. 이 전에 로드된 다른 makefile
변수를 전역 변수로 만들거나 특정 대상으로 만들었을 수도 있습니다. 이러한 경우에는
변수의 값을 찾거나 변수를 할당할 때 해당 속성이 사라질 수 있습니다.
(특정 대상을 제외하고 "재정의" 수정자와 동일합니다.)

직접 액세스를 사용하면 이러한 변수가 유형인 경우 확장을 우회할 수도 있습니다.
"=" 또는 ";=". "$(CC)"와 같은 특수 변수는 함수가 될 때까지 함수로 시작합니다.
할당. 그래서 많은 경우에 당신은 그 가치를 보지 못할 것입니다.

이러한 이유로 makepp가 올바른 값을 결정하도록 하는 것이 더 좋습니다. 당신은 사용할 수 있습니다
Perl 코드가 가져오기 전에 변수가 평가되는 "makeperl" 변형
해석:

makeperl { $$current_value = '$(MAKEFILE_VAR)' }

makefile perl 블록에 변수가 필요한 경우 Perl 변수를 통해 이를 수행할 수 있습니다.
$makefile은 다음과 같습니다:

perl { $current_value = $makefile->expand_variable( 'MAKE_VAR' ) }

함수는 항상 두 번째 인수 $_[1]로 전달된 makefile 개체를 가져옵니다.

sub f_f { $current_value = $_[1]->expand_variable( 'MAKE_VAR' ) }

명령은 makefile 개체가 다음과 같은 규칙 작업 내에서 호출되어야 합니다.
"$Mpp::Subs::rule->{MAKEFILE}"을 통해 액세스 가능:

sub c_cmd { $current_value = $Mpp::Subs::rule->{MAKEFILE}->expand_variable( 'MAKE_VAR' ) }

onworks.net 서비스를 사용하여 온라인으로 makepp_variables 사용


무료 서버 및 워크스테이션

Windows 및 Linux 앱 다운로드

  • 1
    딥 클린
    딥 클린
    모든 빌드를 중단시키는 Kotlin 스크립트
    Gradle/Android 프로젝트의 캐시.
    Gradle 또는 IDE에서 허용할 때 유용합니다.
    아래에. 스크립트가 테스트되었습니다.
    맥OS이지만...
    다운로드
  • 2
    이클립스 체크스타일 플러그인
    이클립스 체크스타일 플러그인
    이클립스 체크스타일 플러그인
    Checkstyle Java 코드 통합
    Eclipse IDE로 감사합니다. 그만큼
    플러그인은 실시간 피드백을 제공합니다.
    viol에 대한 사용자...
    Eclipse 체크스타일 플러그인 다운로드
  • 3
    AstrOrzPlayer
    AstrOrzPlayer
    AstrOrz Player는 무료 미디어 플레이어입니다.
    소프트웨어, 부품은 WMP 및 VLC 기반입니다. 그만큼
    플레이어는 미니멀한 스타일로,
    XNUMX개 이상의 테마 색상과
    B ...
    AstrOrzPlayer 다운로드
  • 4
    무비스타트
    무비스타트
    Kodi Movistar+ TV는 XBMC/용 애드온입니다.
    Kodi que allowede disponer de un 유엔
    IPTV 서비스 디코더 디코더
    Movistar 통합 en uno de los
    미디어 센터 엄마...
    다운로드
  • 5
    코드 :: 블록
    코드 :: 블록
    Code::Blocks는 무료 오픈 소스입니다.
    크로스 플랫폼 C, C++ 및 Fortran IDE
    가장 까다로운 요구 사항을 충족하도록 제작
    사용자의. 그것은 매우 설계
    연장...
    다운로드 코드::블록
  • 6
    가운데
    가운데
    고급 Minecraft 인터페이스 중 또는 고급
    데이터/구조 추적은
    Minecraft 개요 표시
    실제로 생성하지 않고 그것
    할 수있다 ...
    가운데 다운로드
  • 더»

Linux 명령

Ad