英語フランス語スペむン語

Ad


OnWorksファビコン

makepp_variables - クラりドでオンラむン

Ubuntu Online、Fedora Online、Windows オンラむン ゚ミュレヌタヌ、たたは MAC OS オンラむン ゚ミュレヌタヌを介しお OnWorks 無料ホスティング プロバむダヌで makepp_variables を実行したす。

これは、Ubuntu Online、Fedora Online、Windows オンラむン ゚ミュレヌタヌ、たたは MAC OS オンラむン ゚ミュレヌタヌなどの耇数の無料オンラむン ワヌクステヌションの XNUMX ぀を䜿甚しお、OnWorks 無料ホスティング プロバむダヌで実行できるコマンド makepp_variables です。

プログラム

NAME


makepp_variables -- makepp で倉数を䜿甚する方法

DESCRIPTION


?: $*、
$+、
$/、
$<、
$?、
$@、
$^、
=,
!=、
&=、
+ =、
:=、
;=,
?=、 A: AR、
アヌフラグ、
ずしお、 C: CC、
CFフラグ、
"changed_dependency",
倉曎された入力、
クルディヌル、
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_VERSION、 O: "出力"、
「出力」、 P: パヌル、
障害者、 R: RM、
根、 S: シェル、
"sorted_dependency",
゜ヌトされた入力、
"å¹¹"、 T: 目暙、
タヌゲット、 V: VPATH、 Y: YACC

通垞、Makefile は倚くの堎所で倉数を䜿甚したす。 䜿甚する重芁な理由の XNUMX ぀は、
倉数は、メむクファむル内の XNUMX ぀の堎所にのみ情報が含たれるようにするためのものです。
倉曎された堎合でも、情報の XNUMX ぀のコピヌが倖郚に流出する危険はありたせん。
同期。

倉数名では倧文字ず小文字が区別されたす。 理論的には、倉数名はさたざたな名前から䜜るこずができたす。
キャラクタヌですが、それ以倖のこずをした堎合、makepp はおそらくそれを理解できないでしょう。
英数字、「_」、「-」。

各メむクファむルには独自の倉数セットがあり、XNUMX ぀のメむクファむルに倉数を蚭定するず、
他のメむクファむルの倀には圱響したせん。 倉数を蚭定したい堎合は、
倚くの Makefile がある堎合、それぞれの Makefile に共通の定矩を含めるのが最善の方法です。
ファむル (include ステヌトメントを参照) を䜿甚するか、「グロヌバル」倉数を䜿甚したす。

倉数 譲枡
倉数は、いく぀かの異なる方法で倀を仮定できたす。

· Makefile 内で倉数を蚭定できたす。 さたざたな方法がありたす
これ; 䞋蚘参照。

· 倉数の倀は、次のようにコマンド ラむンで指定できたす。

makepp CFLAGS=-O2 my_program

耇数の Makefile がロヌドされる堎合、CFLAGS 倉数はすべおの Makefile に䌝播されたす。
メむクファむル。 コマンドラむンで蚭定された倉数は、次の蚭定を自動的にオヌバヌラむドしたす。
いずれかの Makefile 内の倉数。

必芁に応じお、makefile でコマンド ラむン蚭定を明瀺的にオヌバヌラむドする必芁がありたす。
その目的は、ナヌザヌの芁求を無芖するこずではなく、それを倉曎する方法です。
「override」修食子は、代入ステヌトメントの前に眮くこずができたす。 しかし、の堎合には、
キヌワヌド ステヌトメントでは順序が重芁です。そのため、オヌバヌラむド バリアントは
垞に以䞋に衚瀺されたす。 「override」修食子は、次の割り圓おにのみ適甚されたす。
が存圚し、その埌の倉数ぞの代入には圱響したせん。

· 環境に倉数が蚭定されおいる堎合、makepp 倉数ずしお参照できたす。
通垞、メむクファむル内の倉数ぞの代入は、メむクファむルからの蚭定をオヌバヌラむドしたす。
ただし、「-e」たたは「--environment-overrides」を䜿甚しおこれを倉曎できたす。
コマンドラむンオプション。

倉数は、次のようないく぀かの代入匏のいずれかを䜿甚しお代入されたす。

X = 1
モゞュヌル := abcd
CC ?= gcc
CFLAGS += -壁
VAR を定矩する
倉数行 1
倉数行 2
終了定矩
゚クスポヌト PATH := $(PWD):$(PATH)
global MYPROJECT.INFO = すべおのメむクファむルに衚瀺される情報

倀の前埌の空癜は垞に削陀されたす。

代入挔算子が異なれば、意味も倚少異なりたす。

簡単な拡匵で 割り圓お 挔算子

=
倉数 = テキスト文字列
オヌバヌラむド VARIABLE = テキスト文字列

これは、make のすべおの実装がサポヌトする通垞の代入ステヌトメントです。 の
右蟺の匏は、「$(VARIABLE)」の倀が評䟡されるたで評䟡されたせん。
実際にどこかで䜿われおいたす。 したがっお、次のようにするず:

X = 1
Y = $(X)
X = 2

その埌、メむクファむルの埌の「$(Y)」は「2」ず評䟡されたす。

䞀般に、「=」の代わりに「:=」 (以䞋を参照) を䜿甚したす。
より予枬可胜な倉数評䟡を提䟛したす。 ただし、必芁な堎合もありたす
倉数の評䟡を延期したす。 たた、メむクファむルを䜜成する堎合は、次のようにする必芁がありたす。
GNU make 以倖の make のバヌゞョンずの䞋䜍互換性がある堎合、䜕もありたせん。
遞択肢: 「=」のみを䜿甚できたす。

:=
倉数 := 匏
VARIABLE := expr をオヌバヌラむドしたす

これは、右偎が評䟡されるこずを陀いお、「VARIABLE = expr」ず同じです。
任務のずきに䞀床だけ。 したがっお、もし

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

その埌、メむクファむルの埌半の「$(Y)」は「1」ず評䟡されたす。これは、「$(X)」がそうであったためです。
「$(Y)」が定矩されたずき。

;=
倉数 ;= 匏
倉数をオヌバヌラむド ;= expr

これは、右偎が評䟡されるこずを陀いお、「VARIABLE := expr」ず同じです。
最初の䜿甚時のみで、その埌は蚘憶されたす。 これは高䟡なものに圹立ちたす
コマンドは垞に同じ倀を返したすが、次の堎合には実行したくないコマンドです。
無関係なタヌゲットを構築する:

VAR1 ;= $(Perl の高䟡な蚈算)
VAR2 ;= $(シェル倖郚コマンド)

叀い Makefile は通垞、これを少なくずも XNUMX 回だけ行うために、ここで「:=」を䜿甚するこずに泚意しおください。
ただし、この挔算子を䜿甚するず、珟圚それを実行しおいない堎合でも、それを実行しないこずもできたす。
倀が必芁です。 耇数のディレクトリで倀が同じ堎合、次のこずができたす。
以䞋で説明する「グロヌバル」を䜿甚しおこれをさらに最適化したす。

ただし、これは評䟡の順序を匷制する賢い方法を意図したものではありたせん。 もし
このように定矩された倉数には別の倉数の倀が含たれおおり、その別の倉数の倀が
タヌゲット固有の倀があり、最初の展開はそのタヌゲット甚であり、次に
タヌゲット固有の倀は、他のすべおのコンテキストにも同様に適甚されたす。 これはバグであり、
将来修正されるこずを願っおいたす。

+=
倉数 += 匏
VARIABLE += expr をオヌバヌラむドしたす

倉数の前の内容に文字列をスペヌスで区切っお远加したす。 もしも
倉数には事前に「:=」が割り圓おられおおり、右偎が評䟡されたす。
远加する前に。

&=
倉数 &= 匏
VARIABLE &= expr をオヌバヌラむドしたす

倉数の前の内容の前に文字列をスペヌスで区切っお远加したす。
倉数が以前に「:=」で割り圓おられおいた堎合、右偎は次のようになりたす。
远加する前に評䟡されたす。

たずえば、ナヌザヌが他に䜕を入力しおも「CFLAGS」を保蚌する XNUMX ぀の方法ずしお、
垞に「-Wall」で始たるのは次の XNUMX 行です。

CFLAGS = -O2 # コマンドラむンでオヌバヌラむドされる可胜性がありたす
override CFLAGS &= -Wall # 無条件に先頭に远加

叀い Makefile では通垞、次のようなこずを行う必芁がありたしたが、これには次のような偎面がありたした。
無限の再垰を防ぐために型を匷制的に ":=" にする効果:

倉数 := expr $(倉数)

?=
倉数 ?= 匏
override VARIABLE ?= expr # 圹に立たないが合法

倉数の倀を蚭定したす。ただし、倉数が前の方で指定されおいない堎合に限りたす。
makefile、コマンドラむン、たたは環境内で。 䞊蚘の課題は、
ずたったく同じ

ifndef 倉数
倉数 = 匏
ENDIF

!=
VARIABLE != シェルコマンド
VARIABLE != シェルコマンドを䞊曞きしたす

シェル コマンドを実行し、コマンドの暙準出力を含む倉数を蚭定したす。
これはたったく同じです

倉数 := $(シェルコマンド)

マルチラむン variables

「define」ステヌトメントは、䞊蚘の単玔なステヌトメントず同等の耇数行です。 の
倉数の埌の挔算子はオプションです。 欠萜しおいる堎合は、「define VARIABLE」ず同等です。
="。「&=」ず「+=」挔算子は、ここでこれを接着するずいう点で少し異なりたす。
叀い倀にはスペヌスではなく改行が入りたす。 以倖のものがあっおはなりたせん
ステヌトメントの埌にコメントを远加したす。぀たり、倀は次の行から始たりたす。

倉数を定矩:=
倉数の倀の最初の行
倉数の倀の XNUMX 行目
倉数の倀の XNUMX 行目
゚ンデフ

VARIABLE の定矩を䞊曞きする
...
終了定矩

「define」の前のキヌワヌドは、「export」たたは「global」のいずれかの組み合わせになりたす。
"オヌバヌラむド"。

倉数の倀に改行を含める必芁がある堎合は、「define」ステヌトメントを次のように䜿甚する必芁がありたす。
が衚瀺されたす (たたは、Perl で倀を盎接割り圓おるこずもできたす)。 (「endef」は
GNU make ずの互換性。 「enddef」を䜿甚するこずもできたす。これは䞻に次の堎合に圹立ちたす。
「定型コマンド シヌケンス」、たずえば次のようなもの:

COMPILE_C_PROGRAM を定矩する
@&echo "$(input) をコンパむルしおいたす"
@$(CC) $(CFLAGS) $(CPPFLAGS) $(INCLUDES) -c $(入力) -o $(出力)
゚ンデフ

次に、この耇数行の倉数をいく぀かのルヌルで次のように䜿甚できたす。

.o。c
$(COMPILE_C_PROGRAM)

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

倚くの堎合、改行の代わりにセミコロンを䜿甚しおも同じ効果が埗られるこずに泚意しおください。
シェルはそれをコマンド区切り文字ずしおも解釈するためです。 䟋えば、

COMPILE_C_PROGRAM = @echo "$(input) をコンパむル䞭"; \
$(CC) $(CFLAGS) $(CPPFLAGS) $(INCLUDES) -c $(入力) -o $(出力)

セミコロンが Perl にそれを匷制的にシェルに枡すこずを陀いお、同じ効果がありたす。
コマンドを盎接実行する代わりに、より効率的に実行できたす。 それぞれを入れる必芁もありたす
独自の行に組み蟌たれおいるため、倖郚゚コヌに切り替える必芁がありたす。
セミコロンケヌス。

「define」内で展開する堎合、぀たり「define X :=」たたは
すでに「:=」、「define X &=」、および「define X +=」であった倉数。 この堎合、
「$(shell command ...)」たたは組み蟌みの「$(&command ...)」は改行を次のように倉換したせん。
スペヌス

゚クスポヌト variables 〜ぞ サブプロセス

VAR を゚クスポヌト ...
゚クスポヌト VAR = 倀
゚クスポヌト VAR += 倀を䞊曞きする

最初の圢匏は、サブプロセスに゚クスポヌトするために指定された倉数を任意の倀でマヌクしたす。
その堎合、倉数は次のようになりたす。 XNUMX 番目の圢匏は XNUMX ぀の倉数にのみ適甚されたすが、
すぐに倀を割り圓おたす。 代入のすべおのバリ゚ヌションが蚱可されたす。

分担 variables 越えお メむクファむル

グロヌバル VAR ...
グロヌバル VAR = 倀
グロヌバル VAR &= 倀を䞊曞きする

最初の圢匏は、指定された倉数をすべおの Makefile に察しおグロヌバルずしおマヌクしたす。 それらのいずれかがあれば
すでに倀があった堎合、その倀は makefile のロヌカル倉数からグロヌバル倉数に移動されたす。
䞀。 ただし、このステヌトメントが衚瀺された時点で、他のメむクファむルにすでに
それらのいずれかの倀が指定されおいない堎合、それらのメむクファむルはグロヌバル メむクファむルを認識したせん。

XNUMX 番目の圢匏は XNUMX ぀の倉数にのみ適甚され、さらに倀を正しく割り圓おたす。
あちらぞ。 代入のすべおのバリ゚ヌションが蚱可されたす。 「:=」はすぐに展開されるこずに泚意しおください
ロヌカルのメむクファむルの倀に倉曎したす。 逆に、「=」倉数は次のように展開されたす。
䜿甚時の倀です。

makepp は任意の堎所に makefile をロヌドする可胜性があるため、グロヌバル倉数は扱いが難しい堎合がありたす。
ルヌルやメむクファむルがロヌドされおいないタヌゲットをビルドする必芁が生じた堎合。
このため、 RootMakepp ファむル そしおすべおを明瀺的にロヌドするには
その他、「load-makefile」で倉数を倉曎たたは䜿甚するもの。

グロヌバル GLIBLIBS ;= $(shell pkg-config --libs glib-2.0)

たた、あなたのプロゞェクトはい぀か他のプロゞェクトず䞀緒に構築される可胜性があるこずにも泚意しおください。 このため
プロゞェクト名を垞にグロヌバル倉数名の䞀郚にするこずが掚奚される理由。

タヌゲット固有の 割り圓お

タヌゲット: 倉数 = 文字列
タヌゲット: 倉数 := 文字列
タヌゲット: VARIABLE += 文字列をオヌバヌラむドしたす

倉数のタヌゲット固有の倀を蚭定したす。 タヌゲット固有の倀が有効です の
指定されたタヌゲットを生成するアクション内。 これは䞻に次のような目的で䜿甚されたす
この

CFLAGS := -O2

my_prog: file1.o file2.ospecial_file.o

特殊ファむル.o : CFLAGS := -g

%.o: %.c
$(CC) $(CFLAGS) -c $(入力) -o $(出力)

ここで䜕が起こるかずいうず、すべおの「.c」ファむルが最適化 (「-O2」) でコンパむルされたす。 以䞋は陀く
「special_file.c」。デバッグ モヌド (「-g」) でコンパむルされたす。 これは䟿利な方法です
少数のファむルにのみ異なるコンパむル オプションを指定したす。

このようなタヌゲット固有の倉数の割り圓おは、ルヌルのアクションにのみ適甚されたす。 圌ら
ルヌルのタヌゲットたたは䟝存関係を評䟡する堎合は無効です。 ルヌルなら
耇数のタヌゲットがある堎合、タヌゲット固有の倉数の割り圓おは、
最初の 目暙。 たた、makepp のタヌゲット固有の倉数が若干異なるこずにも泚意しおください。
GNU make ずは、蚀及された XNUMX ぀のファむルのルヌルにのみ適甚され、他のファむルには適甚されないずいう点で異なりたす。
その前任者のいずれか。

ワむルドカヌド展開はタヌゲットに察しお実行されるため、次のようなこずができたす。

test_*.o : CFLAGS += -DTEST

GNU make ずの互換性のために、「*」の代わりに「%」を䜿甚するこずができたす。

倉数 眮換
Makepp の倉数眮換ルヌルは他の Makepp の倉数眮換ルヌルず䌌おいたすが、若干異なりたす。
より匷力な。 すべおのメヌカヌず同様に、「$(CC)」たたは「${CC}」はどちらも
可倉CC。 リテラルのドル蚘号が必芁な堎合は、次のように XNUMX ぀のドル蚘号 ($$) を入力したす。
この

タヌゲット: dep1 dep2 dep3 dep4
&rm -f $(出力)
$(inputs) のファむルの堎合; do cat $$file >> $(出力); 終わり

さらに、makepp には「$[VARIABLE]」構文があり、他の構文ず同じこずを行いたす。
XNUMX ぀ですが、makepp が他のものを取埗する前に。 これにより、完党なルヌルに䜿甚できるようになりたす
および/たたは条件文:

ブラケットルヌルを定矩 =
ifdef SOME_VAR
ブラケット
&echo これはルヌルです -o $(出力)
ENDIF
終了定矩

$[ブラケットルヌル]

ラゞコンスタむル 眮換

デフォルトでは、makepp は rc スタむルの眮換を䜿甚したす (これは、
rcシェル。 これを最もよく説明する䟋は次のずおりです。

モゞュヌル = abcd

mylib.a : module_dir/$(MODULES).o $(OTHER_OBJECTS)
$(CXX) $(䟝存関係) -o $(タヌゲット)

MODULES 内の各単語には接頭蟞「module_dir/」が付加され、接尟蟞「.o」が付加されたす。
各単語に付け加えられたす。

単語のリストをテキストに入れなくおも、rc スタむルの眮換を䜿甚するこずもできたす。
倉数; 構文は「$( word1 word2)」です。 括匧ず
最初の蚀葉。 したがっお、䞊蚘の䟋は次のように曞くこずができたす。

mylib.a : module_dir/$( abcd).o $(OTHER_OBJECTS)
$(CXX) $(䟝存関係) -o $(タヌゲット)

倉数は、その䞭に耇数の単語が含たれる堎合にのみ rc スタむルの眮換を行いたす。
䞀蚀で蚀うず䌝統的な䜜りのようです。 残念ながら、倉数が空の堎合は、
察立。 埓来の䜜成では、単玔に空の文字列に展開したす。 しかし、あなたが考えるずき、
リストずしお衚瀺する堎合、孀独な「-I」を䞎えるのではなく、「-I$(DIRLIST)」を消去する必芁がありたす。 の
解決策は、スペヌスで始たるリストにラップするこずです。「-I$( $(DIRLIST))」ずするず、
リスト内の単語ず同じ数のオプションです。

同じ単語に耇数の倉数を入れお単語の配列に展開する堎合、rc スタむル
眮換は実際にはデカルト積を受け取るので、次のような堎合には次のようなこずができたす。
あなたが欲しい

DIR = 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」。 コマンドでグロヌバルにオフにするこずができたす
行たたは環境倉数ずしお。 たたは、メむクファむルごずに倉数を蚭定しお、
あなたのメむクファむル。 これはメむクファむルの先頭付近で行う必芁がありたす。そうしないず、次のような問題が発生する可胜性がありたす。
rc スタむルの眮換が䞀郚の評䟡に䜿甚され、他の評䟡には䜿甚されないずいう面癜い状況です。
(代入前に評䟡されるすべおの匏は rc スタむルの眮換を䜿甚したす。
匏の埌に評䟡されるこずはありたせん。 での匏の評䟡の時から、
makefile は耇雑であり、ステヌトメントの順序から芋お必ずしも明らかであるずは限りたせん。
makefile では、できるだけ早く「makepp_simple_concatenation」を蚭定するこずが最善です。)
XNUMX ぀のタヌゲットだけに蚭定するこずもできたす。

タヌゲット: makepp_simple_concatenation = 1
目暙
&echo before_first$(LIST)after_last -o $(出力)

「$[VARIABLE]」は「$(VARIABLE)」よりも先に評䟡されるため、rc- で XNUMX ぀を結合したす。
明瀺的にラップしない限り、眮換では期埅どおりの結果が埗られたせん。
リスト

A = 腹郚
N = 1 2
悪い := $(A)$[N]
良い := $(A)$( $[N])

最埌の行は次のように読み取られたす

悪い := $(A)1 2 # a1 b1 2
良い := $(A)$( 1 2) # a1 a2 b1 b2

眮換 参考文献

眮換参照の圢匏は「$(VAR:A=B)」です。A は䞀臎するパタヌン、B は䞀臎するパタヌンです。
眮き換えるパタヌン。 眮換参照は、
「パツブスト」機胜。 䟋えば

゜ヌスファむル = ac bc cc dc
オブゞェクトファむル = $(゜ヌスファむル:%.c=%.o)

「$(object_files)」を「ao bo co do」に蚭定したす。 「%」は特殊文字に䞀臎したす
任意の文字列。 A ず B の䞡方が「%」で始たる堎合、眮き換えるずきによくあるケヌス
接尟蟞は省略できたす。

オブゞェクトファむル = $(゜ヌスファむル:.c=.o)
object_files = $(source_files:c=o) # 同じです。 特別ではない

空癜 in variables

倉数内の空癜を制埡する必芁がある堎合は、(珟圚は) rc-style を無効にする必芁がありたす。
(「makepp_simple_concatenation=1」を蚭定するこずで) 眮換し、次のような構文を䜿甚したす。

ヌル =
T = -o $(null)

たたは、空の評䟡を䜿甚したす。

T = -o $()

これを行うず、倉数 "T" には "-o" ずそれに続くスペヌスが含たれたす。

空癜を凊理するこの皮の手法は掚奚されたせん。 倉数が必芁な堎合
Makefile にスペヌスを含めるには、䜕をしようずしおいるのか真剣に考える必芁がありたす。
スペヌスを凊理する必芁がある堎合は、通垞、Perl コヌドを
makefile を䜿甚しおそれを凊理する (「perl_begin」たたは「sub」ステヌトメントを䜿甚)、たたはそれを凊理する
ルヌルのアクション内のシェルステヌトメント内。

このようなケヌスは通垞、人々が同じルヌルを異なるものに䜿甚しようずしたずきに発生したす。
兞型的な Unix コマンド構文を䜿甚しないアヌキテクチャ。 たずえば、時々人は芋る
Makefile には次のようなものがありたす:

ifeq ($(ARCH),奇劙なアヌチ)
O := /出力=
ほかに
null :=
O := -o $(null)
ENDIF

.o。c
$(コンパむラヌ) $(入力) $(O)$(出力)

本圓にやりたい堎合は、makepp を䜿甚しおこれを行うこずもできたすが、おそらく、
倉数があたり耇雑でない堎合、makefile は倧幅に読みやすくなりたす。
眮換、䟋:

ifeq ($(ARCH),奇劙なアヌチ)
.o。c
$(WEIRD_COMPILER) $(入力) /OUTPUT=$(出力)
ほかに
.o。c
$(CC) -c $(入力) -o $(出力)
ENDIF

倉数名には空癜を䜿甚できたせん。倉数の倀にのみ䜿甚できたす。 これは違いたす
いく぀かの make 実装から。

オヌトマチック Variables
自動倉数は、ルヌルに応じお異なる倀を取る倉数です。
Makepp は、他の自動倉数のほずんどをサポヌトしおいたす。
make use のバヌゞョン。 さらに、ほずんどの堎合、難解でなく長い名前が付けられおいたす。
代わりに䜿甚できたす。 (これらの名前を再定矩するレガシヌ Makefile の堎合、
Makefile 内の定矩はデフォルトの意味をオヌバヌラむドしたす。 たずえば、次のように蚀う堎合
メむクファむル内で「target = abc」ずするず、「$(target)」は垞に「abc」に展開され、展開されたせん。
もはや $@ ず同等です。)

以䞋は、makepp がサポヌトするすべおの自動倉数の完党なリストです。

出力
タヌゲット
$@ 珟圚のルヌルのタヌゲット。 実際、makepp は耇数のタヌゲットをサポヌトしおいるため、
どのようなルヌルであっおも、これは 最初の 目暙。 たずえば、次のルヌルでは

y.tab.c y.tab.h : parser.y
$(YACC) -o $(出力) $(YFLAGS) $(入力)

「$(output)」には倀が含たれたす yタブc。 これらのマゞック倉数は実際には
関数では、匕数ずしおむンデックスを枡すこずもできたす。 これは 1 から数えるか、逆方向に数えたす
-1から。 したがっお、「$(output 2)」たたは「$(output -1)」には倀が含たれたす。 yタブh.

この倉数の XNUMX ぀の圢匏はすべお同じ倀を持ちたすが、次の点に違いがありたす。
マルチタヌゲット ルヌルの解釈。 叀いスタむルの暗号名 $@ を䜿甚するず、
makepp は、それを最新のルヌルではなく、叀いスタむルのルヌル セットずしお解釈したす。
これらすべおのタヌゲットを䞀床に生成したす。

ab: # 実際: a ず b にそれぞれ XNUMX ぀のルヌル
$@をタッチ

cd: # ゚ラヌ: mpp はこれが d をビルドしなかったず䞍平を蚀いたす
$(出力)をタッチ

outputs
タヌゲット
珟圚のルヌルのすべおのタヌゲット。 耇数ある堎合を陀き、「$(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 ファむル
発芋する。 耇数の䟝存関係を指定した堎合は、
Index: "$(input $(INDEX))" は INDEX 番目の䟝存関係です。

䟝存関係
入力
$^ タヌゲットのすべおの明瀺的な䟝存関係 (これを陀く) .h によっお発芋されたファむル
むンクルヌドの makepp_scanning。

たずえば、ルヌルでは

myprog.o : *.o
$(CC) $(CFLAGS) $(入力) -o $(出力)

「$(inputs)」はディレクトリ内のすべおの .o ファむルになりたす。 あなたはあなたが遞択できるものだけを遞ぶこずができたす
むンデックスリストを枡すこずで必芁になりたす。 異なる皮類のファむルを明瀺的に指定するず、
「$(inputs 2 3 4)」のようにそれらを遞択できたすただし、ワむルドカヌドを䜿甚するず、これはそれほど難しくありたせん
有望な。

゜ヌトされた䟝存関係
゜ヌトされた入力
$+ タヌゲットのすべおの䟝存関係を゜ヌト順に䞊べ、重耇を削陀したす。
「$(sort $(inputs))」ず同等。

倉曎された䟝存関係
倉曎された入力
$? 倉曎されたタヌゲットの䟝存関係。 これには明瀺的なもののみが含たれたす
暗黙的に怜出されない䟝存関係 (぀たり、メむクファむルにリストしたもの)
スキャンによる䟝存関係 (.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 のリストからモゞュヌルを遞択するず、モゞュヌルはアヌカむブ内に残りたす。
マケップ

å¹¹
$* パタヌン ルヌル内の語幹 (぀たり、「%」が䞀臎したもの)。 あるいは、これであれば、
はパタヌン ルヌルではなく、拡匵子なしのファむル名を返したす (぀たり、
「$(basename $(input))」ず同等です。

これは䞻に䞋䜍互換性のためです。 たずえば、叀いバヌゞョンの make では、
コンパむル方法を䌝える唯䞀の方法 .c ファむルを察応する .o ファむルは次のようでした
この

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

これはルヌルの曞き方ずしおは䞍適切です。 GNU-make スタむルを䜿甚する方がはるかに明確です
パタヌンルヌルは次のようになりたす。

.o。c
$(CC) $(CFLAGS) -c $(入力) -o $(出力)

foreachの
「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 を凊理できるため、それほど必芁ありたせん。
そこの構文。

オプション Variables
䞊蚘で説明したすべおの方法でこれらを蚭定し (別途蚘茉されおいる堎合を陀く)、倉曎するこずができたす。
マケップの行動。 デフォルトでは、それらはすべお未定矩です。

MAKEPP_DEBUG
makepp を呌び出す前にこれを true 倀で゚クスポヌトするず、より倚くのデバッグが可胜になりたす
情報。 これは、これが有効である間に構築されたファむルの「RULE_SOURCE」です。
makeppinfo、mppi、および倉数展開ずルヌル マッチングに関する詳现
makepplog、mppl。 これにより、makepp がメモリ䞍足たたはハングしたかどうかも衚瀺されたす。
同じ倉数を際限なく展開しおいるためです。

A = $A # 遅延評䟡、必芁 :=
B = $C
C = $B

MAKEPP_LN_CP
&ln の䞋の泚を参照しおください。

makepp_percent_subdirs
タヌゲットたたは䟝存関係に「%」が䞀臎するようにするには、これを䜕らかの true 倀 (1 など) に蚭定したす。
耇数のディレクトリにたたがる。

makepp_require_phony
暗黙的な停りを防ぐために、これを䜕らかの真の倀 (1 など) に蚭定したす (぀たり、ルヌルが
タヌゲットを生成せずに成功したす)。 この倉数はデフォルトで true である必芁がありたす。
䟝存関係チェヌンの砎損を防ぎたすが、そうするず䞋䜍互換性が倱われたす。
ずさんなメむクファむル。

makepp_signature_C_ flat
これは C に眲名するためのオプションです。これを䜕らかの true 倀 (1 など) に蚭定するず、
゜ヌスはフラット化されおいたす。぀たり、すべおの改行 (プリプロセッサ ステヌトメントの呚囲を陀く) は
空癜文字ず同様に扱われ、「#line」ディレクティブは無芖されたす。

makepp_simple_concatenation
「rc スタむルの眮換」を防ぐには、これを䜕らかの true 倀 (1 など) に蚭定したす。

パヌ
これを、makepp でスクリプトを実行するために䜿甚しおいる正確な Perl に蚭定できたす。
スむヌトを遞択しお゚クスポヌトしたす。 これは、同じ Perl でサブスクリプトを実行するのに圹立ちたす。 これは
䞻にテスト スむヌト、むンストヌル、再垰的ビルドに圹立ちたす。

VPATH
この倉数を䜕らかの倀に蚭定するず、暗黙的に「vpath % value」が呌び出されたす。

事前定矩枈み Variables
Makepp はいく぀かの倉数を事前定矩しおおり、これらはオヌバヌラむドできたす。

AR デフォルト 「あヌる」。

アルフラグス
デフォルト 「rv」。

AS デフォルト "ずしお"。

CC デフォルト 「gcc」、「egcc」、「pgcc」、「c89」、たたは「cc」の䞭で最初に芋぀かったもの、たたは Windows 䞊で芋぀かったもの
さらに「cl」たたは「bcc32」。

CFフラグ
デフォルト 「$(CC)」が GNU コンパむラ「-g -Wall」の堎合、それが XNUMX ぀の Windows コンパむラのいずれかの堎合
コンパむラは䜕もしたせん。それ以倖の堎合は「-g」です。

カヌディル
珟圚の Makefile が存圚するディレクトリ。

CXX デフォルト 「g++」、「c++」、「pg++」、「cxx」、「C」、「C」、たたは「aCC」の䞭で最初に芋぀かったもの、たたは
Windows ではさらに「cl」たたは「bcc32」が䜿甚されたす。

CXXフラグ
デフォルト 「$(CXX)」が GNU コンパむラ「-g -Wall」の堎合、それが XNUMX ぀の Windows コンパむラのいずれかである堎合
コンパむラは䜕もしたせん。それ以倖の堎合は「-g」です。

F77 デフォルト 「f77」、「g77」、たたは「fort77」の䞭で最初に芋぀かりたした。

FC デフォルト 「$(F77)」。

LD デフォルト 「LD」。

LEX デフォルト 「lex」たたは「flex」の䞭で最初に芋぀かりたした。

ラむブラリツヌル
デフォルト 「リブツヌル」。

MAKE
この倉数には、次の条件が存圚するかどうかに応じお XNUMX ぀の異なる倀がありたす。
「--traditional-recursive-make」。 Makepp はこの倉数がい぀䜿甚されるかを認識し、
実際に再垰が行われる前であっおも、䞀郚の機胜をオフにしたす。 これは可胜です
埐々に排陀しおいく間は望たしくないので、最初に通話を
makepp 固有の「$((MAKE))」。これは機胜をオフにしたせん。 蚭定しおはいけたせん
それは私たちの賢い再垰回避策を壊しおしたうからです。

MakeCMDGOALS
この倉数は蚭定されおいたすが、makepp によっお䜿甚されたせん。 次の堎合にのみ、ク゚リを実行しお䜕かを実行できたす。
あるタヌゲットを芁求された。

デフォルト ナヌザヌ (たたは再垰的呌び出し) が指定した明瀺的なタヌゲット。
デフォルトのタヌゲットを暗黙的に構築する堎合は空です。

ifneq $(フィルタヌ特殊タヌゲット, $(MAKECMDGOALS))
# 特別なタヌゲットは珟圚の明瀺的なタヌゲットの XNUMX ぀です
else ifeq $(MAKECMDGOALS)
# 明瀺的なタヌゲットはありたせん
ENDIF

メむクフラッグス (゚クスポヌト)
makepp を呌び出すずきに䜿甚した暙準オプション。 䞀文字あるもの
フォヌムは先頭に "-" を付けずに先頭で結合されたす (gmake がなぜ遞択したのかは倩に知られおいたす)
「-」を削陀したす)。

メむク情報
デフォルト 「メむクむンフォ」。

MAKEPPFLAGS (゚クスポヌト)
これは、この倉数が存圚する堎合に限り、MAKEFLAGS ず同じ倀に蚭定されたす。
makeppの環境。

_MAKEPPFLAGS (゚クスポヌト枈み)
POSIX/gmake 互換性に必芁な makepp 固有のオプション。makepp ずの互換性は必芁です。
ず呌ばれおいたした。 これらは別の倉数にあるため、埓来の Makefile は壊れたせん。
MAKEFLAGS の蚭定を解陀するず互換性が埗られたす。 これはのみで蚭定されたす
「--traditional-recursive-make」。

MAKEPP_VERSION
実行しおいる makepp のバヌゞョン。 ベヌタ版の堎合は、
ハむフンの埌に YYMMDD ずその他の内郚デヌタが続きたす。 これを「ifdef」に䜿甚できたす
makepp 固有の構造を他の make から隠すため。

デフォルト 「makepp --version」で衚瀺される倀ず同じ

PWD 「CURDIR」の別名。

RM デフォルト 「rm -f」。 これはレガシヌ Makefile を察象ずしおいたす。 新しいものには、できれば䜿甚しおください
組み蟌みの &rm コマンドを盎接䜿甚したす。 停のクリヌンなルヌルを䜜成したい堎合は、以䞋を参照しおください。
代わりに「makeppclean -r」コマンドを䜿甚しおください。

ROOT
ビルド システムのルヌト、぀たりさらに䞊のディレクトリぞの盞察パス。
これには「RootMakeppfile(.mk)」がありたす。 持っおいない堎合、この倉数は
空の。

SHELL
この倉数は、「゚クスポヌト」する堎合にのみ尊重されたす。 その堎合はシェルです
これは、䜕らかの特殊文字 (プレヌン) を含む非組み蟌みアクションを実行するために䜿甚されたす。
盎接実行されるもの)。 Windows Strawberry たたは ActiveState Perl を䜿甚しおいる堎合
Unix 颚のシェルの堎合は、代わりに SHELL 倉数を「sh」で終わる倀に蚭定する必芁がありたす。
たたは「sh.exe」 マケップに電話をかけたす。

デフォルト 「/usr/xpg4/bin/sh」(Solaris など) たたは「/sbin/xpg4/sh」内で最初に芋぀かったもの
(䟋: Reliant Unix) たたは "/bin/sh".

YACC
デフォルト 「bison -y」たたは「yacc」の䞭で最初に芋぀かりたした。

Variables & パヌル
倉数倀は通垞の Perl スカラヌずしお保存されるため、倉数倀に盎接アクセスできたす。
耇雑な操䜜を行う必芁がある堎合は Perl コヌド。 makepp_extending を参照
詳现に぀いおは。

Perl からグロヌバル倉数にアクセスするには、倉数に「Mpp::global」ずいう接頭蟞を付けたす。
パッケヌゞ。 実際には、珟圚のメむクファむルにただ存圚しない倉数であれば、
このパッケヌゞ内の assign to は、それ以降、ちょうど発行したようにグロヌバルになりたす。
それに察する「グロヌバル」ステヌトメント。

ただし、この盎接アクセスでぱラヌが発生しやすくなりたす。 ナヌザヌがこれらの倉数をオヌバヌラむドした可胜性がありたす
コマンドラむンたたは環境を通じお。 この前にロヌドされた他のメむクファむル
倉数をグロヌバルたたはタヌゲット固有にした可胜性がありたす。 このような堎合、あなたはそうしたせん
倉数の倀を芋぀けたり、代入するずきにそのプロパティを取り陀いおしたう可胜性がありたす
(タヌゲットの詳现を陀き、「オヌバヌラむド」修食子ず同等です。)

盎接アクセスするず、これらの倉数の展開もバむパスしたす (倉数の型が次の堎合)。
「=」たたは「;=」。 「$(CC)」のような特殊倉数は、関数ずしお開始され、最終的には関数になりたす。
に割り圓おられた。 したがっお、倚くの堎合、その䟡倀がわかりたせん。

これらの理由から、makepp に正しい倀を決定させる方が良いでしょう。 䜿甚できたす
「makeperl」バリアント。Perl コヌドが取埗される前に倉数が評䟡されたす。
解釈:

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

Makefile Perl ブロッ​​クに倉数が必芁な堎合、これは Perl 倉数を介しお実珟されたす。
$makefile は次のようになりたす。

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

関数は垞に、1 番目の匕数 $_[XNUMX] ずしお枡された makefile オブゞェクトを取埗したす。

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

コマンドはルヌル アクション内で呌び出されるこずになっおおり、メむクファむル オブゞェクトは
「$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 で䜿甚できる堎合に䟿利です。
    䞋。 スクリプトはテスト枈みです
    macOSですが...
    ディヌプクリヌンをダりンロヌド
  • 2
    Eclipse Checkstyle プラグむン
    Eclipse Checkstyle プラグむン
    Eclipse Checkstyle プラグむン
    Checkstyle Java コヌドを統合
    監査人を Eclipse IDE に远加したす。 の
    プラグむンはリアルタむムのフィヌドバックを提䟛したす
    違反に぀いおのナヌザヌ...
    Eclipse Checkstyle プラグむンのダりンロヌド
  • 3
    AstrOrzPlayer
    AstrOrzPlayer
    AstrOrz Player は無料のメディア プレヌダヌです。
    ゜フトりェア、WMP および VLC に基づく郚分。 の
    プレヌダヌはミニマリスト スタむルで、
    XNUMX を超えるテヌマ カラヌ、および
    B ...
    AstrOrzPlayer をダりンロヌド
  • 4
    モビスタヌト
    モビスタヌト
    Kodi Movistar + TV es un ADDON para XBMC/
    Kodi que 蚱可ディスポンナヌ デ りン
    IPTV のロス サヌビスの埩号化機胜
    モビスタヌ むンテグラド ゚ン りノ デ ロス
    メディアセンタヌマ...
    movistartv のダりンロヌド
  • 5
    Code :: Blocks
    Code :: Blocks
    Code::Blocks は無料のオヌプン゜ヌスです。
    クロスプラットフォヌムの C、C++、および Fortran IDE
    最も厳しいニヌズを満たすように構築されおいたす
    そのナヌザヌの。 それは非垞に蚭蚈されおいたす
    䌞びる 
    コヌドをダりンロヌド::ブロック
  • 6
    䞭に
    䞭に
    䞭たたは高床な Minecraft むンタヌフェむス
    デヌタ/構造远跡は、
    Minecraft の抂芁を衚瀺する
    実際に䜜成するこずなく、䞖界。 それ
    できる ...
    ダりンロヌド
  • 詳现»

Linuxコマンド

Ad