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

Ad


OnWorksファビコン

短所 - クラりドでオンラむン

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

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

プログラム

NAME


短所 - ゜フトりェア構築システム

DESCRIPTION


バヌゞョン 2.2.0 のガむドずリファレンス

Copyrightc1996-2000 Free Software Foundation、Inc。

このプログラムは自由゜フトりェアです。 あなたはそれを再配垃および/たたはそれを倉曎するこずができたす
Free SoftwareFoundationによっお発行されたGNUGeneral Public License; たた
ラむセンスのバヌゞョン2、たたはオプションでそれ以降のバヌゞョン。

このプログラムは、圹立぀こずを期埅しお配垃されおいたすが、いかなる保蚌もありたせん。
商品性たたは特定目的ぞの適合性の黙瀺の保蚌もありたせん。
詳现に぀いおは、GNU General PublicLicenseを参照しおください。

このプログラムず䞀緒にGNUGeneral PublicLicenseのコピヌを受け取っおいるはずです。
COPYING ファむルを参照しおください。 そうでない堎合は、Free Software Foundation, Inc., 59 Temple たでご連絡ください。
堎所 - スむヌト 330、ボストン、マサチュヌセッツ州 02111-1307、米囜。

抂芁


デメリット 䞻に゜フトりェアを構築するためのシステムですが、
以前の゜フトりェア構築システム。 短所は察凊するためにれロから蚭蚈されたした
耇数の゜ヌス ディレクトリにたたがる゜フトりェアを簡単に構築できたす。 短所
シンプルで理解しやすく、保守しやすいビルド スクリプトを簡単に䜜成できたす。
短所は、耇雑な゜フトりェアが簡単か぀正確に再珟できるこずを保蚌したす。

Cons は、これらすべおを達成するために倚くの手法を䜿甚したす。 コンストラクション スクリプトは
Perl スクリプト。理解しやすく、非垞に柔軟です。 のグロヌバル スコヌピング
倉数間で情報を共有するためのむンポヌト/゚クスポヌト メカニズムに眮き換えられたす。
これにより、各スクリプトの可読性ず保守性が倧幅に向䞊したす。
構造 環境 が導入されおいたす: これらは、
ビルド プロセスを制埡するために必芁な情報。 耇数の環境が䜿甚されおいる
ビルド ツリヌで補品を生成するために異なるセマンティクスが必芁な堎合。 短所
自動䟝存関係分析を実装し、これを䜿甚しお党䜓をグロヌバルにシヌケンスしたす
建おる。 バリアント ビルドは、単䞀の゜ヌス ツリヌから簡単に䜜成できたす。 むンテリゞェントなビルド
ロヌカラむズされた倉曎を行う堎合、サブセット化が可胜です。 オヌバヌラむドを蚭定できたす
スクリプトを倉曎するこずなく、ビルド手順を簡単にオヌバヌラむドできたす。 MD5 暗号化
眲名 掟生ファむルに関連付けられおいるかどうかを正確に刀断するために䜿甚されたす。
特定のファむルを再構築する必芁がありたす。

䞊蚘のすべおを提䟛しながら、短所はシンプルで䜿いやすいたたです。 この意志、
願わくば、このドキュメントの残りの郚分を読んで理解しおください。

なぜ 短所 なぜ 䜜る


短所は make 眮換。 次の段萜では、いく぀かの
make の望たしくない特性 (および make に基づく兞型的なビルド環境)
Consの開発を動機付けたした。

完成に向けおあなたの背䞭を抌しおくれる、執筆のための持続可胜で本物のモヌメンタムを䜜り出す。 耇雑さ

あらゆる芏暡の埓来のメヌクベヌスのシステムは、非垞に耇雑になる傟向がありたす。 オリゞナルの䜜り
ナヌティリティずその掟生物は、さたざたな方法でこの傟向に貢献しおいたす。 メむクは
耇数のディレクトリに分散しおいるシステムを扱うのは苊手です。 いろいろな仕事――
この困難を克服するために、アラりンドが䜿甚されたす。 通垞の遞択は make を呌び出すこずです
ビルドの各サブディレクトリに察しお再垰的にそれ自䜓。 これは耇雑なコヌドに぀ながりたす。
倉数がどのように蚭定されるか、たたは倉数の蚭定がどのような圱響を䞎えるかが䞍明な堎合が倚い
ビルド党䜓に適甚されたす。 make スクリプト蚀語は埐々に拡匵されおいたす
より倚くの可胜性を提䟛するために
拡匵された蚀語。 倚くの堎合、ビルドは耇数のパスで実行されたす。
適切な補品をあるディレクトリから別のディレクトリに移動したす。 これはさらなる
ビルドの耇雑さが増したす。

完成に向けおあなたの背䞭を抌しおくれる、執筆のための持続可胜で本物のモヌメンタムを䜜り出す。 再珟性

すべおの make の悩みの皮は、垞に䟝存関係を正しく凊理するこずでした。 ほずんどの堎合、
単䞀のディレクトリ内で䟝存関係の合理的な仕事をしようずしたすが、そうではありたせん
ディレクトリ間でゞョブを実行するための真剣な詊みが行われたす。 䟝存関係がある堎合でも
正しく動䜜するかどうかを刀断するために、make は単玔なタむム スタンプの比范に䟝存したす。
ファむルがその埓属ファむルに関しお叀くなっおいる堎合、䞀般に、ファむルには適切ではありたせん。
ファむルをい぀再生成するかを決定したす。 たずえば、倖郚ラむブラリが
再構築されお「スナップ」されるず、新しく䜜成されたファむルのタむムスタンプが
衚瀺される前にビルドされたので、最埌のロヌカル ビルドよりも前にある可胜性がありたす。

バリアント 構築したす

Make は、バリアント ビルドを凊理するための限られた機胜のみを提䟛したす。 増殖ずずもに
ハヌドりェア プラットフォヌムの違いず、デバッグ可胜なコヌドず最適化されたコヌドの必芁性、
これらのバリアントを簡単に䜜成できるこずが䞍可欠です。 さらに重芁なこずは、バリアントが䜜成された堎合、
バリアントを分離できるか、たたは再珟できるかのいずれかが重芁です。
自由にオリゞナルたたはバリアント。 make を䜿甚するず、ビルドを次のように分離するこずは非垞に困難です。
゜ヌスずは別の耇数のビルド ディレクトリ。 そしお、このテクニックを䜿わなければ、
たた、どのバリアントが存圚するかを垞に保蚌するこずも事実䞊䞍可胜です。
ツリヌを完党に再構築する必芁はありたせん。

リポゞトリ

Make は、ファむルに存圚するコヌドから゜フトりェアを構築するための限定的なサポヌトのみを提䟛したす。
䞭倮リポゞトリのディレクトリ構造。 GNU make の VPATH 機胜 (およびその他の機胜)
make implementations) はこれを提䟛するこずを目的ずしおいたすが、期埅どおりに動䜜したせん:
分析の早い段階でタヌゲット ファむルのパスを VPATH 名に倉曎するため、
VPATH ディレクトリ内のすべおの䟝存関係を怜玢したす。 正しく開発するために
ビルドの堎合、ロヌカルのビルド ディレクトリにファむルを䜜成しお、
ロヌカルに䟝存するコヌド リポゞトリ (make 甚語では VPATH ディレクトリ) 内のすべおのファむル
ファむルが適切に再構築されたす。 これは、倚くのコヌディングを行わないず、VPATH では䞍可胜です。
耇雑なリポゞトリの知識をメむクファむルに盎接。

キヌピング it シンプルな


make の難しさのいく぀かは䞊で匕甚されおいたす。 これ以降では
セクションでは、短所を玹介し、これらの問題にどのように察凊するかを瀺したす。

パヌル スクリプト

短所は Perl ベヌスです。 ぀たり、Cons スクリプトです。城集兵 & 構築する ファむル、同等のもの
〜ぞ メヌクファむル or メむクファむル-- すべお Perl で曞かれおいたす。 これにより、すぐにメリットが埗られたす。
スクリプトを曞くための蚀語はよく知られおいたす。 あなたがたたたたPerlでなくおも
プログラマヌにずっお、Perl は基本的に単玔な宣蚀型蚀語であるこずを知っおおくず圹に立ちたす。
明確に定矩された制埡フロヌず䜿い慣れたセマンティクスを備えおいたす。 動䜜する倉数がありたす
基本的には、サブルヌチン、制埡の流れなど、あなたが期埅する方法です。 そこには
Cons に導入された特別な構文はありたせん。 スクリプト蚀語ずしおの Perl の䜿甚
しばしば耇雑な問題に察する適切な解決策を衚珟するタスクを簡玠化したす
ビルドの芁件。

こんにちは、 䞖界

以䞋の議論の土台ずなるように、 こんにちは、 䞖界 C
短所のあるアプリケヌション:

$env = 新しいコンス();
プログラム $env 'hello', 'hello.c';

このスクリプトをディレクトリにむンストヌルする堎合は、スクリプトに名前を付けたす。 構築する、を䜜成し、
こんにちはC ゜ヌス ファむルが同じディレクトリにある堎合は、「cons hello」ず入力しおビルドできたす。
アプリケヌション

% 短所こんにちは
cc -c こんにちは.c -o こんにちは.o
cc -o こんにちは hello.o

構造 環境

Cons の重芁な単玔化は、 建蚭 環境. 建蚭
環境は オブゞェクト キヌず倀のペアのセットず 方法。
コンスに䜕かを構築する方法を䌝えるために、適切なメ゜ッドを
適切な建蚭環境。 次の䟋を怜蚎しおください。

$env = 新しいコンス(
CC => 'gcc',
ラむブラリ => 'libworld.a'
);

プログラム $env 'hello', 'hello.c';

この堎合、デフォルトのコンストラクション環境をそのたた䜿甚するのではなく、
`CC' の倀を䞊曞きしお、代わりに GNU C Compiler の等䟡物が䜿甚されるようにしたした。 以来
このバヌゞョンの こんにちは、 䞖界 ラむブラリが必芁です。 libworld.a、任意の
この環境でリンクされたプログラムは、そのラむブラリずリンクする必芁がありたす。 図曞通なら
すでに存圚したすが、そうでない堎合は、次のステヌトメントも含める必芁がありたす。

ラむブラリ $env 'libworld', 'world.c';

ここで「cons hello」ず入力するず、プログラムがリンクされる前にラむブラリが構築されたす。
もちろん、`gcc' は䞡方のモゞュヌルをコンパむルするために䜿甚されたす:

% 短所こんにちは
gcc -c hello.c -o hello.o
gcc -c ワヌルド.c -o ワヌルド.o
a r libworld.a world.o
ar: libworld.a を䜜成しおいたす
ranlib libworld.a
gcc -o こんにちは hello.o libworld.a

オヌトマチック & コンプリヌト 䟝存関係 分析

Cons を䜿甚するず、䟝存関係が自動的に凊理されたす。 前の䟋を続けるず、次のこずに泚意しおください。
私たちが倉曎するずき world.c, 侖界.o 再コンパむルされ、 libworld.a 再䜜成され、 こんにちは
再リンク:

% vi world.c
[線集]
% 短所こんにちは
gcc -c ワヌルド.c -o ワヌルド.o
a r libworld.a world.o
ar: libworld.a を䜜成しおいたす
ranlib libworld.a
gcc -o こんにちは hello.o libworld.a

これは比范的単玔な䟋です: Cons ``知っおいる'' 侖界.o 䟝存する world.c、理由
䟝存関係は、`Library' メ゜ッドによっお明瀺的に蚭定されたす。 それも分かっおいる libworld.a
䟝存する 侖界.o その こんにちは 䟝存する libworld.a、すべお同様の理由で。

今、それが刀明したした こんにちはC むンタヌフェむス定矩ファむルも含たれおいたす。 world.h:

% emacs world.h
[線集]
% 短所こんにちは
gcc -c hello.c -o hello.o
gcc -o こんにちは hello.o libworld.a

コンスはどうやっおそれを知っおいたすか こんにちはC 含た world.h、その こんにちは。 したがっお、
再コンパむル 今のずころ、かどうかを考えるずきは、 こんにちは。 起きおいる-
今日たで、コンスはその䟝存関係のためにスキャナヌを呌び出したす。 こんにちはC. このスキャナヌは、
によっお含たれるファむル こんにちはC それらを超えお、さらなる䟝存関係のリストを考え出す
Cons スクリプトによっお明瀺されたす。 このプロセスは再垰的です。
含たれおいるファむルもスキャンされたす。

これは高くないですか 答えは、堎合によりたす。 倧芏暡システムのフルビルドを行う堎合、
スキャン時間はわずかです。 倧芏暡なシステムの再構築を行う堎合、短所は
䜕もする必芁がないず刀断する前に、かなりの時間をかけおそれに぀いお考えたす
完了 (ただし、make よりも時間がかかるずは限りたせん!)。 良いニュヌスは、短所がそれを䜜るこずです
ロヌカラむズされた倉曎に取り組んでいるずきに、ビルドをむンテリゞェントにサブセット化するのは非垞に簡単です。

オヌトマチック 党䜓的な ビルド シヌケンシング

コンスは完党か぀正確な䟝存関係分析を行い、これをグロヌバルに行うため、
コンスはこの情報を䜿甚しお、ビルド党䜓を完党に制埡できたす。 シヌケンシング
ビルドの。 この順序付けは、䞊蚘の䟋で明らかであり、次のものず同等です。
䟝存関係の完党なセットを考えるず、make に期埅するでしょう。 短所があるず、これは拡匵されたす
倧芏暡なマルチディレクトリ ビルドに簡単に察応できたす。 その結果、関連するすべおの耇雑さが
マルチパス階局を含む、ビルドが正しく線成されおいるこずを確認する
builds -- は削陀されたす。 これに぀いおは、次のセクションでさらに説明したす。

建物 倧 朚――ただ ただ as シンプルな


A 階局 of ビルド スクリプト

Cons のより倧きなビルドは、次の階局を䜜成するこずによっお線成されたす。 ビルド スクリプト. 頂点で
ツリヌのスクリプトは 構築する. 慣䟋により、残りのスクリプトはそれぞれ
呌ばれたす 城集兵. これらのスクリプトは、非垞に単玔に、「ビルド」によっお盞互に接続されおいたす。
「゚クスポヌト」および「むンポヌト」コマンド。

  完成に向けおあなたの背䞭を抌しおくれる、執筆のための持続可胜で本物のモヌメンタムを䜜り出す。 command

`Build' コマンドは、 城集兵 ファむル名、およびそれらが
ビルドに含たれおいたす。 䟋えば

ビルド qw(
ドラむバヌ/ディスプレむ/コンスクリプト
ドラむバヌ/マりス/コンスクリプト
パヌサヌ/コンスクリプト
公益事業/城兵
);

これは、ビルド スクリプトの単玔な XNUMX レベルの階局です。 城集兵 ファむル
トップレベルで蚀及されおいる 構築する ファむル。 ツリヌ内のすべおのディレクトリではないこずに泚意しおください
ビルド スクリプトが関連付けられおいる必芁がありたす。

これは、マルチレベル スクリプトずしお蚘述するこずもできたす。 たずえば、 構築する ファむルかもしれない
次のコマンドを含めたす。

ビルド qw(
パヌサヌ/コンスクリプト
ドラむバヌ/城兵
公益事業/城兵
);

ず 城集兵 内のファむル ドラむバヌ ディレクトリにはこれが含たれおいる可胜性がありたす

ビルド qw(
衚瀺/城兵
マりス/城兵
);

経隓䞊、前のモデルの方が理解しやすいこずがわかっおいたす。
コンストラクション ツリヌ党䜓が目の前の最䞊䜍に配眮されたす。 ハむブリッドスキヌムは
可胜です。 に組み蟌む必芁がある、個別に維持されるコンポヌネント
たずえば、ビルド ツリヌは XNUMX か所でビルド ツリヌにフックできたすが、独自の定矩を定矩したす。
構築階局。

デフォルトでは、Cons はその䜜業ディレクトリをファむルを含むディレクトリに倉曎したせん。
子䌚瀟 城集兵 それが含たれおいるファむル。 この動䜜は、ビルドに察しお有効にするこずができたす
指定、トップレベル 構築する ファむル

Conscript_chdir 1;

有効にするず、コンスは子䌚瀟に倉わりたす 城集兵 ファむルを含むディレクトリ
そのファむルを読み蟌んでいる間、ファむルが読み蟌たれたらトップレベルのディレクトリに戻りたす
凊理されたした。

Cons の将来のバヌゞョンでは、この動䜜がデフォルトになるこずが予想されたす。
この移行に備えるために、コンスがビルドの最䞊䜍に留たるこずを期埅するビルド
子䌚瀟で読み蟌み䞭 城集兵 ファむルは、この機胜を明瀺的に無効にする必芁がありたす。
以䞋

Conscript_chdir 0;

盞察的、 䞊䜍盞察、 & 絶察の file 名

Build コマンドに指定されたファむル名は、
呌び出されるスクリプトの堎所。 これは通垞、他のファむル名にも圓おはたりたす
他のコマンドぞの匕数も同様です。
ファむル名にハッシュ蚘号「#」を付けた堎合、そのファむルは先頭からの盞察䜍眮で解釈されたす。
レベル ディレクトリ ( 構築する ファむルが存圚したす)。 そしお、驚くこずではありたせんが、それを始めるず
``/'' を䜿甚するず、絶察パス名ず芋なされたす。 これはシステム䞊でも圓おはたりたす
スラッシュではなくバックスラッシュを䜿甚しお絶察パスに名前を付けたす。

䜿い方 モゞュヌル in ビルド スクリプト

モゞュヌルをそれぞれにプルできたす 城集兵 通垞の Perl の「use」たたは「require」を䜿甚したファむル
文

英語を䜿う;
My::モゞュヌルが必芁です。

それぞれの「use」たたは「require」は、XNUMX ぀だけに圱響したす。 城集兵 衚瀺されるファむル。 を䜿甚するには
耇数のモゞュヌル 城集兵 ファむルごずに「use」たたは「require」ステヌトメントを配眮する必芁がありたす
モゞュヌルが必芁なもの。

察象領域 of variables

トップレベル 構築する ファむルずすべお 城集兵 ファむルは共通の個別の Perl で始たりたす
パッケヌゞ。 デメリット パッケヌゞのシンボル テヌブルを制埡しお、そのシンボル テヌブルを
を陀いお、各スクリプトは空です。 構築する コマンドラむンの䞀郚を取埗するファむル
匕数。 したがっお、蚭定たたは䜿甚されるすべおの倉数は、スクリプトによっお蚭定されたす。
倖郚スクリプトによるものではありたせん。

倉数は明瀺的に 茞入された 芪スクリプトからのスクリプトによっお。 をむンポヌトするには
倉数、だったに違いない 茞出された 芪によっお初期化されたす (それ以倖の堎合ぱラヌ
発生したす。

  茞出 command

「゚クスポヌト」コマンドは、次の䟋のように䜿甚されたす。

$env = 新しいコンス();
$INCLUDE = "#export/include";
$LIB = "#export/lib";
qw( env INCLUDE LIB ); を゚クスポヌトしたす。
ビルド qw( util/Conscript );

「゚クスポヌト」リストに蚘茉されおいる単玔な倉数の倀は、取り陀かれたす
埌続の「ビルド」コマンドによっお。 「゚クスポヌト」コマンドは Perl のみを゚クスポヌトしたす スカラヌ
぀たり、名前が `$' で始たる倉数です。 その他の倉数、オブゞェクトなど
参照によっお゚クスポヌトできたすが、すべおのスクリプトは同じオブゞェクトを参照したす。
オブゞェクトは、補助スクリプトおよび元のスクリプトによっお読み取り専甚であるず芋なされる必芁がありたす。
スクリプトを゚クスポヌトしおいたす。 ただし、゚クスポヌトされたスカラヌに新しい倀を割り圓おるこずは蚱容されたす
variable -- 参照される基になる倉数は倉曎されたせん。 このシヌケンスは、
䟋、OKです

$env = 新しいコンス();
qw( env INCLUDE LIB ); を゚クスポヌトしたす。
ビルド qw( util/Conscript );
$env = new cons(CFLAGS => '-O');
ビルド qw( other/Conscript );

倉数が「゚クスポヌト」コマンドの前たたは埌に蚭定されおいるかどうかは問題ではありたせん。 の
重芁なこずは、`Build' コマンドが実行されたずきの倉数の倀です。
これがリスを远い払うものです。 ちなみに、その埌の「゚クスポヌト」コマンドは、
最初の無効化: それぞれで゚クスポヌトしたいすべおの倉数に蚀及する必芁がありたす
「゚クスポヌト」コマンド。

  むンポヌト command

「゚クスポヌト」コマンドによっお゚クスポヌトされた倉数は、
「むンポヌト」コマンド。 補助スクリプトは垞に倉数を盎接むンポヌトしたす。
優れたスクリプト。 次の䟋を怜蚎しおください。

むンポヌト qw( env INCLUDE );

これは、芪スクリプトが `$env' ず `$INCLUDE' の䞡方を゚クスポヌトした堎合にのみ有効です。 それはたたしなければならない
これらの倉数倀のそれぞれに䞎えられおいたす。 サブスクリプトのみでもOK
゚クスポヌトされた倉数のサブセットをむンポヌトしたす (この䟋では、によっお゚クスポヌトされた `$LIB'
前の䟋ではむンポヌトされたせん)。

むンポヌトされた倉数はすべお自動的に再゚クスポヌトされるため、シヌケンスは次のようになりたす。

qw をむンポヌトしたす ( env INCLUDE );
ビルド qw (underly-me/Conscript);

`$env' ず `$INCLUDE' の䞡方を補助ファむルに提䟛したす。 `$env' のみを指定する堎合
゚クスポヌトされた堎合、次で十分です。

qw をむンポヌトしたす ( env INCLUDE );
qw ( env ) を゚クスポヌトしたす。
ビルド qw (underly-me/Conscript);

蚀うたでもなく、倉数は、ビルドを実行する前にロヌカルで倉曎できたす。
サブスクリプト。

完成に向けおあなたの背䞭を抌しおくれる、執筆のための持続可胜で本物のモヌメンタムを䜜り出す。 スクリプト 評䟡 泚文

ビルド スクリプトの順序に関する唯䞀の制玄は、䞊䜍のスクリプトが
䞋䜍スクリプトの前に評䟡されたす。 トップレベル 構築する たずえば、ファむルは
最初に評䟡され、その埌に䞋䜍のスクリプトが続きたす。 これはあなたが本圓に知る必芁があるすべおです
評䟡の順序に぀いおは、䞀般的に順序は無関係であるためです。 次のこずを考慮しおください
「ビルド」コマンド:

ビルド qw(
ドラむバヌ/ディスプレむ/コンスクリプト
ドラむバヌ/マりス/コンスクリプト
パヌサヌ/コンスクリプト
公益事業/城兵
);

スクリプト名をアルファベット順に䞊べるこずにしたした。
メンテナンスに䟿利。 順番を倉えおも倉わらない
ビルド。

A モデル for シェアリング ファむル


侀郹 シンプルな 芏則

耇雑な゜フトりェア システムでは、ビルド プロダクトを共有する方法が必芁です。
蚭立。 実装するのが簡単な単玔な䞀連の芏則を提案したす
短所ですが、非垞に効果的です。

基本的なルヌルは、共有する必芁があるすべおのビルド補品を芁求するこずです
ディレクトリは䞭間ディレクトリを介しお共有されたす。 私たちは通垞、これを呌んでいたす
export、および C 環境では、このディレクトリの埓来のサブディレクトリを提䟛し、
など include, リブ, ビン, etc.

これらのディレクトリは、最䞊䜍の 構築する ファむル。 シンプルな 構築する ファむル
a こんにちは、 䞖界 耇数のディレクトリを䜿甚しお線成されたアプリケヌションは、次のようになりたす。

# Hello, World! のコンストラクト ファむル

# すべおの共有補品をどこに眮くか。
$EXPORT = '#゚クスポヌト';

Export qw(CONS INCLUDE LIB BIN );

# 補品を共有するための暙準ディレクトリ。
$INCLUDE = "$EXPORT/include";
$LIB = "$EXPORT/lib";
$BIN = "$EXPORT/ビン";

# 暙準的な構築環境。
$CONS = 新しい短所 (
CPPPATH => $INCLUDE, # C コンパむルのむンクルヌド パス
LIBPATH => $LIB, # プログラムをリンクするためのラむブラリ パス
LIBS => '-lworld', # 暙準ラむブラリのリスト
);

ビルド qw(
こんにちは/城兵
侖界/城兵
);

  侖界 ディレクトリの 城集兵 ファむルは次のようになりたす。

# ディレクトリワヌルドのコンスクリプトファむル
import qw( CONS INCLUDE LIB );

# このディレクトリの補品をむンストヌルしたす
$CONS $LIB, 'libworld.a' をむンストヌルしたす。
$CONS $INCLUDE, 'world.h'; をむンストヌルしたす。

# 内郚補品
ラむブラリ $CONS 'libworld.a', 'world.c';

ず こんにちは ディレクトリの 城集兵 ファむルは次のようになりたす。

# ディレクトリ hello のコンスクリプト ファむル
qw( CONS BIN ); をむンポヌトしたす。

# 茞出補品
$CONS $BIN, 'hello'; をむンストヌルしたす。

# 内郚補品
プログラム $CONS 'hello', 'hello.c';

構築するには こんにちは、 䞖界 このディレクトリ構造を持぀プログラムで、最䞊䜍に移動したす
ディレクトリに移動し、適切な匕数を指定しお「cons」を呌び出したす。 次の䟋では、
Consにディレクトリを構築するように指瀺したす export. ディレクトリを構築するために、Cons はすべおを再垰的に構築したす。
そのディレクトリ内の既知の補品 (もちろん、再構築が必芁な堎合のみ)。 いずれかの堎合
それらの補品は他のディレクトリ内の他の補品に䟝存しおおり、それらは構築されたす。
のためにペンを持぀時間も芋぀けおいたす。

% cons ゚クスポヌト
world/world.h を export/include/world.h ずしおむンストヌルしたす。
cc -Iexport/include -c hello/hello.c -o hello/hello.o
cc -Iexport/include -c world/world.c -o world/world.o
a r world/libworld.a world/world.o
ar: world/libworld.a を䜜成しおいたす
ranlib ワヌルド/libworld.a
world/libworld.a を export/lib/libworld.a ずしおむンストヌルしたす。
cc -o こんにちは/こんにちは こんにちは/hello.o -Lexport/lib -lworld
hello/hello を export/bin/hello ずしおむンストヌルしたす

掃陀、 理解できる、 堎所に䟝存しない スクリプト

この XNUMX ぀は 城集兵 ファむルは非垞にきれいで芁点がはっきりしおいたす。 圌らは単に
ディレクトリの補品ずそれらの補品のビルド方法を指定したす。 ビルド手順
最小限: 䜿甚するコンストラクション環境、補品名、
および入力の名前。 スクリプトは堎所に䟝存しないこずにも泚意しおください。
゜ヌス ツリヌを再線成したい堎合は、自由に倉曎できたす。倉曎する必芁があるのは、
構築する ファむル (この䟋では) を䜿甚しお、新しい堎所を指定したす。 城集兵 ファむル。 ザ・
゚クスポヌト ツリヌを䜿甚するず、この目暙が容易になりたす。

たた、Cons が现かな凊理をどのように凊理するかにも泚目しおください。 党おの export ディレクトリ、
たずえば、自動的に䜜成されたした。 そしお、むンストヌルされたファむルは実際にハヌドリンクされおいたした
スペヌスず時間を節玄するための、それぞれの゚クスポヌト ディレクトリ。 现郚ぞのこの泚意は救いたす
シンプルで保守しやすいスクリプトの䜜成がさらに簡単になりたす。

分ける source & ビルド 朚


倚くの堎合、ビルドからの掟生ファむルを完党に分離しおおくこずが望たしいです。
゜ヌスファむル。 これにより、゜ヌスファむルが䜕であるかを远跡するこずがはるかに簡単になりたす.
たた、取り扱いが簡単になりたす 異圢 ビルド、特にバリアント ビルドが必芁な堎合
共存するこず。

分ける ビルド & source ディレクトリ   リンク command

Cons は、これらすべおの芁件を凊理する単玔なメカニズムを提䟛したす。 「リンク」
コマンドは、次の䟋のように呌び出されたす。

Link 'build' => 'src';

指定されたディレクトリは、指定された゜ヌス ディレクトリに「リンク」されたす。 仮定したしょう
゜ヌスディレクトリをセットアップし、 SRC、サブディレクトリずずもに 侖界 & こんにちは その䞋に、
前の䟋のように。 その埌、元のビルドラむンを眮き換えるこずができたす
次のずおりです。

ビルド qw(
ビルド/ワヌルド/コンスクリプト
ビルド/こんにちは/コンスクリプト
);

あなたが扱うこずに泚意しおください 城集兵 ビルド ディレクトリに存圚するかのようにファむルを䜜成したす。 今なら
前ず同じコマンドを入力するず、次の結果が埗られたす。

% cons ゚クスポヌト
build/world/world.h を export/include/world.h ずしおむンストヌルしたす。
cc -Iexport/include -c build/hello/hello.c -o build/hello/hello.o
cc -Iexport/include -c build/world/world.c -o build/world/world.o
a r build/world/libworld.a build/world/world.o
ar: build/world/libworld.a を䜜成しおいたす
ranlib build/world/libworld.a
build/world/libworld.a を export/lib/libworld.a ずしおむンストヌルしたす。
cc -o ビルド/hello/hello ビルド/hello/hello.o -Lexport/lib -lworld
build/hello/hello を export/bin/hello ずしおむンストヌルしたす

繰り返したすが、Cons が詳现を凊理しおくれたす。 特に、すべおのこずに気付くでしょう。
ビルドは、ビルド ディレクトリの゜ヌス ファむルずオブゞェクト ファむルを䜿甚しお行われたす。 為に
䟋、 ビルド/ワヌルド/ワヌルド.o からコンパむルされたす ビルド/ワヌルド/ワヌルド.c,
゚クスポヌト/むンクルヌド/world.h からむンストヌルされたす ビルド/ワヌルド/ワヌルド.h. これは、ほずんどの堎合に達成されたす
各゜ヌスから必芁なファむルを「ハヌド」リンクするずいう単玔な手段によるシステム
ディレクトリを適切なビルド ディレクトリにコピヌしたす。

゜ヌスディレクトリに察しお䜕をしおも、リンクは Cons によっお正しく維持されたす。
゜ヌスファむルを倉曎する堎合、゚ディタはこれを「その堎で」行うか、名前を倉曎する堎合がありたす
最初に新しいファむルを䜜成したす。 埌者の堎合、すべおのハヌド リンクが倱われたす。 短所は
次に゜ヌス ファむルが必芁になったずきにこの状態を怜出し、再リンクしたす。
適切に。

ちなみに、次のこずにも気付くでしょう。 いいえ 基瀎に倉曎が必芁でした 城集兵
ファむル。 次のセクションで説明するように、さらに先に進むこずができたす。

バリアント 構築したす


こんにちは、 䞖界 for バナナ & 桃 OS

バリアント ビルドには、単玔な拡匵機胜がもう XNUMX ぀必芁です。 䟋ずしお
baNaNa ず peAcH オペレヌティング システムの䞡方のビルドを蚱可する必芁がありたす。 この堎合、
NFS などの分散ファむル システムを䜿甚しお特定のシステムにアクセスしおいる。
いずれかのシステムのみを特定の呌び出しに察しおコンパむルする必芁がありたす。
「短所」。 蚭定方法の XNUMX ぀を次に瀺したす。 構築する 私たちのファむル こんにちは、 䞖界
アプリケヌション

# Hello, World! のコンストラクト ファむル

$OS = $ARG{OS} でない限り、die qq(OS を指定する必芁がありたす);
die qq(OSは「peach」か「banana」である必芁がありたす)
if $OS ne "桃" && $OS ne "バナナ";

# すべおの共有補品をどこに眮くか。
$EXPORT = "#export/$OS";

Export qw(CONS INCLUDE LIB BIN );

# 補品を共有するための暙準ディレクトリ。
$INCLUDE = "$EXPORT/include";
$LIB = "$EXPORT/lib";
$BIN = "$EXPORT/ビン";

# 暙準的な構築環境。
$CONS = 新しい短所 (
CPPPATH => $INCLUDE, # C コンパむルのむンクルヌド パス
LIBPATH => $LIB, # プログラムをリンクするためのラむブラリ パス
LIBS => '-lworld', # 暙準ラむブラリのリスト
);

# $BUILD は、すべおを掟生させる堎所です。
$BUILD = "#build/$OS";

# $BUILD の゜ヌス ファむルがどこにあるかを cons に䌝えたす。
リンク $BUILD => 'src';

建おる 
"$BUILD/hello/Conscript",
"$BUILD/ワヌルド/コンスクリプト",
);

peAcH システムにログむンするず、 こんにちは、 䞖界 そのためのアプリケヌション
プラットフォヌム

% cons ゚クスポヌト OS=peach
build/peach/world/world.h を export/peach/include/world.h ずしおむンストヌルしたす。
cc -Iexport/peach/include -c build/peach/hello/hello.c -o build/peach/hello/hello.o
cc -Iexport/peach/include -c build/peach/world/world.c -o build/peach/world/world.o
a r build/peach/world/libworld.a build/peach/world/world.o
ar: build/peach/world/libworld.a を䜜成䞭
ranlib ビルド/ピヌチ/ワヌルド/libworld.a
build/peach/world/libworld.a を export/peach/lib/libworld.a ずしおむンストヌルしたす。
cc -o build/peach/hello/hello build/peach/hello/hello.o -Lexport/peach/lib -lworld
build/peach/hello/hello を export/peach/bin/hello ずしおむンストヌルしたす

バリ゚ヌション on a テヌマ

このモデルの他のバリ゚ヌションが可胜です。 たずえば、
むンクルヌド ファむルをプラットフォヌムに䟝存するファむルずプラットフォヌムに䟝存しないファむルに分けたす。
この堎合、プラットフォヌム䟝存の $INCLUDE の代替を定矩する必芁がありたす。
ファむル。 倚くの 城集兵 玔粋にプラットフォヌムに䟝存しないむンクルヌド ファむルを生成するファむルは、
倉曎する必芁はありたせん。

たた、デバッグやプロファむリングを䜿甚しおシステム党䜓をコンパむルできるようにするこずもできたす。
たずえば、有効にしたす。 これは、次のような適切なコマンド ラむン オプションを䜿甚しお行うこずができたす。
`DEBUG=オン'。 これは、適切なプラットフォヌム固有の
デバッグを有効にするための芁件 (これには、最適化をオフにするこずが含たれる堎合がありたす。
䟋。 オプションで、これらの異なるタむプのシステムの名前空間を倉えるこずができたす。
しかし、次のセクションで説明するように、そうではありたせん 本質的な コンスはきれいなので、これを行うには
オプションを倉曎したずきに物事を再構築するのが賢明です。

眲名


MD5 暗号 眲名

Cons が掟生ファむルを䜜成するずきはい぀でも、 眲名 そのファむルのために。 眲名
ディレクトリごずに XNUMX ぀の別のファむルに栌玍されたす。 前の䟋をコンパむルした埌、
  。委蚗 内のファむル ビルド/ピヌチ/ワヌルド ディレクトリは次のようになりたす。

world.o:834179303 23844c0b102ecdc0b4548d1cd1cbd8c6
libworld.a:834179304 9bf6587fa06ec49d864811a105222c00

最初の数字はタむムスタンプです。UNIX システムの堎合、これは通垞、
1 幎 1970 月 5 日からの秒数。XNUMX 番目の倀は MDXNUMX チェックサムです。 の メッセヌゞ ダむゞェスト
アルゎリズム 入力文字列を指定しお、匷力な暗号を蚈算するアルゎリズムです。
その文字列の眲名。 に栌玍されおいる MD5 チェックサム 。委蚗 ファむルは、事実䞊、
指定されたファむルのすべおの䟝存関係情報のダむゞェスト。 たずえば、
侖界.o ファむル、これには少なくずも world.c ファむル、およびコンスするすべおのヘッダヌ ファむル
盎接的たたは間接的に含たれおいるこずを知っおいる world.c。 それだけでなく、
生成に䜿甚された実際のコマンドラむン 侖界.o の蚈算にも䟛絊されたす
眲名。 同様に、 libworld.a すべおを「含む」眲名を取埗したす
その構成芁玠の眲名 (したがっお、掚移的に、の眲名 アプリ環境に合わせお
コンスティチュ゚ント)、およびファむルを䜜成したコマンドラむン。

非掟生ファむルの眲名は、デフォルトで、珟圚の
ファむルの倉曎時刻ずファむルの゚ントリ名 (たたたた倉曎があった堎合を陀く)
珟圚 。委蚗 この堎合、その眲名が䜿甚されたす)。

掟生ファむルが特定のファむルに䟝存する必芁がないこずに泚意しおください。 構築する or
城集兵 file -- これらのファむルぞの倉曎が問題のファむルに圱響する堎合、これは
コマンドラむンの関連郚分は
眲名に含たれおいたす。 無関係な倉曎は効果がありたせん。

Cons が特定のファむルを掟生させるかどうかを怜蚎するずき、たず、
ファむルの予想される眲名。 次に、ファむルの最終倉曎時刻を比范したす
に蚘録された時間 。委蚗 ゚ントリ (存圚する堎合)。 これらの時間が䞀臎する堎合、
に保存されおいる眲名 。委蚗 ファむルは正確であるず芋なされたす。 ファむルが以前の堎合
眲名が新しい予想される眲名ず䞀臎しない堎合、ファむルを再生成する必芁がありたす。

䟝存ファむルに関する䜕かが倉曎されるたびに、ファむルが再掟生されるこずに泚意しおください。 の
特に、泚意しおください どれか 埓属の倉曎時間ぞの倉曎 (前方たたは
逆方向) は、掟生ファむルの再コンパむルを匷制したす。

これらの眲名の䜿甚は、非垞に単玔で効率的か぀効果的な方法です。
システムの再珟性を劇的に改善したす。

簡単な䟋でこれを瀺したす。

# シンプルな「Hello, World!」 構成ファむル
$CFLAGS = '-g' if $ARG{DEBUG} eq 'on';
$CONS = 新しいコンス(CFLAGS => $CFLAGS);
プログラム $CONS 'hello', 'hello.c';

Cons が適切なタむミングで再コンパむルされるこずに泚意しおください。

% 短所こんにちは
cc -c こんにちは.c -o こんにちは.o
cc -o こんにちは hello.o
% 短所こんにちは
短所「こんにちは」は最新です。
% cons DEBUG=on こんにちは
cc -g -c ハロヌ.c -o ハロヌ.o
cc -o こんにちは hello.o
% cons DEBUG=on こんにちは
短所「こんにちは」は最新です。
% 短所こんにちは
cc -c こんにちは.c -o こんにちは.o
cc -o こんにちは hello.o

Code リポゞトリ


倚くの゜フトりェア開発組織には、XNUMX ぀以䞊の䞭倮リポゞトリ ディレクトリがありたす。
XNUMX ぀たたは耇数のプロゞェクトの珟圚の゜ヌス コヌドず掟生した゜ヌス コヌドを含むツリヌ
オブゞェクト ファむル、ラむブラリ、および実行可胜ファむル。 䞍芁な再コンパむルを枛らすために、
リポゞトリのファむルを䜿甚しお開発゜フトりェアをビルドするず䟿利です。
もちろん、ロヌカル ビルド ツリヌに新しい䟝存関係ファむルが存圚しないこずを確認しおください。

倉庫

Cons は、怜玢されるコヌド リポゞトリのリストを指定するメカニズムを提䟛したす。
ロヌカル ビルド ディレクトリ ツリヌに芋぀からない゜ヌス ファむルおよび掟生ファむルの堎合。

次の行 構築する ファむルは、コンスに最初に以䞋を調べるように指瀺したす
/usr/実隓/リポゞトリ ディレクトリの䞋に /usr/補品/リポゞトリ ディレクトリ

リポゞトリ qw (
/usr/実隓/リポゞトリ
/usr/補品/リポゞトリ
);

指定されたリポゞトリ ディレクトリには、゜ヌス ファむル、掟生ファむル (オブゞェクト、
ラむブラリず実行可胜ファむル)、たたはその䞡方。 䞋にロヌカル ファむル (゜ヌスたたは掟生) がない堎合
Cons が実行されるディレクトリ、次に芋぀かった同じ名前のファむルの最初のコピヌ
リポゞトリ ディレクトリの䞋にある は、ロヌカルの掟生ファむルを構築するために䜿甚されたす。

Cons は、リポゞトリ ディレクトリの XNUMX ぀のグロヌバル リストを維持したす。 短所は、
珟圚のディレクトリ、および存圚しないディレクトリをリストから削陀したす。

怜玢   構築する file in a 倉庫

短所も怜玢したす 構築する & 城集兵 リポゞトリ ツリヌたたはツリヌ内のファむル。
ただし、これはニワトリが先か卵が先かずいう状況に぀ながりたす: リポゞトリ ツリヌをどのように芋るか
のために 構築する ファむルの堎合 構築する ファむルは、リポゞトリがどこにあるかを教えおくれたすか? 取埗するため
これに぀いおは、コマンドラむンで「-R」オプションを䜿甚しおリポゞトリを指定できたす。

% cons -R /usr/experiment/repository -R /usr/product/repository 。

で指定されたすべおのリポゞトリ ディレクトリ 構築する or 城集兵 ファむルが远加されたす
コマンドラむンの `-R' オプションで指定されたリポゞトリ ディレクトリに。

倉庫 source ファむル

゜ヌスコヌド 城集兵 ファむル) のラむブラリ バヌゞョンの こんにちは、
䞖界 C アプリケヌションはリポゞトリにあり (掟生ファむルなし)、Cons は
リポゞトリ ゜ヌス ファむルを䜿甚しお、ロヌカル オブゞェクト ファむルず実行可胜ファむルを䜜成したす。

% cons -R /usr/src_only/repository こんにちは
gcc -c /usr/src_only/repository/hello.c -o hello.o
gcc -c /usr/src_only/repository/world.c -o world.o
a r libworld.a world.o
ar: libworld.a を䜜成しおいたす
ranlib libworld.a
gcc -o こんにちは hello.o libworld.a

ロヌカル ゜ヌス ファむルを䜜成するず、Cons は適切な掟生ファむルを再構築するか、
ファむル

% ピコワヌルド.c
[線集]
% cons -R /usr/src_only/repository こんにちは
gcc -c ワヌルド.c -o ワヌルド.o
a r libworld.a world.o
ar: libworld.a を䜜成しおいたす
ranlib libworld.a
gcc -o こんにちは hello.o libworld.a

たた、ロヌカル ゜ヌス ファむルを削陀するず、Cons は掟生ファむルのビルドに戻りたす。
リポゞトリ ゜ヌスからのファむル:

% rm world.c
% cons -R /usr/src_only/repository こんにちは
gcc -c /usr/src_only/repository/world.c -o world.o
a r libworld.a world.o
ar: libworld.a を䜜成しおいたす
ranlib libworld.a
gcc -o こんにちは hello.o libworld.a

倉庫 掟生 ファむル

リポゞトリ ツリヌに掟生ファむル (通垞はオブゞェクト ファむル、ラむブラリ、たたは
実行可胜ファむル)、Cons は通垞の眲名蚈算を実行しお、
リポゞトリ ファむルが最新であるか、掟生ファむルをロヌカルでビルドする必芁がありたす。 この意味は、
眲名が正しく蚈算されるようにするには、リポゞトリ ツリヌに
。委蚗 掟生ファむルを生成するずきに Cons によっお䜜成されたファむル。

これは通垞、リポゞトリで゜フトりェアをビルドするこずによっお達成されたす (たたは、
たたは、ビルド ディレクトリで、結果をリポゞトリにコピヌしたす):

% cd /usr/all/リポゞトリ
% 短所こんにちは
gcc -c hello.c -o hello.o
gcc -c ワヌルド.c -o ワヌルド.o
a r libworld.a world.o
ar: libworld.a を䜜成しおいたす
ranlib libworld.a
gcc -o こんにちは hello.o libworld.a

(これは、 構築する ファむルは /usr/all/リポゞトリ のディレクトリ
「リポゞトリ」コマンドは、Cons がリポゞトリから珟圚のディレクトリを削陀するためです。
リスト。

独自のアプリケヌションのコピヌを䜜成したい堎合 こんにちはC ファむル、必芁なのは
XNUMX ぀の必芁な゜ヌス ファむルを䜜成し、`-R' オプションを䜿甚しお、Cons に他の゜ヌス ファむルを䜿甚させたす。
リポゞトリからのファむル:

% mkdir $HOME/build1
% cd $HOME/build1
%ed hello.c
[線集]
% cons -R /usr/all/repository こんにちは
gcc -c hello.c -o hello.o
gcc -o こんにちは hello.o /usr/all/repository/libworld.a

Cons はわざわざロヌカルを再䜜成しおいないこずに泚意しおください。 libworld.a ラむブラリ (たたは
侖界.o モゞュヌル) を䜿甚したすが、代わりにリポゞトリから既にコンパむルされたバヌゞョンを䜿甚したす。

Cons が入れた MD5 眲名は 。委蚗 ファむルには、
掟生ファむルの堎合、眲名のタむムスタンプはファむルのタむムスタンプず䞀臎する必芁がありたす。
有効ずみなされたす。

䞀郚の゜フトりェア システムは、リポゞトリ ファむルのタむムスタンプを倉曎する堎合がありたす (それらをコピヌしお、
䟋) この堎合、Cons はデフォルトで、リポゞトリの眲名が無効であるず想定したす。
䞍必芁にファむルを再構築したす。 この動䜜は、次を指定するこずで倉曎できたす。

リポゞトリ_Sig_Times_OK 0;

これは、眲名が有効かどうかを刀断するずきにタむムスタンプを無芖するように Cons に指瀺したす。 ノヌト
この健党性チェックを回避するこずは、リポゞトリを適切に制埡する必芁があるこずを意味したす
ツリヌを曎新せずに掟生ファむルを倉曎できないようにしたす。 。委蚗
サむン。

ロヌカル コピヌ of ファむル

リポゞトリ ツリヌにビルドの完党な結果が含たれおいる堎合、そこからビルドしようずしたす。
ロヌカル ツリヌにファむルのないリポゞトリ。適床に驚くべきこず
起こる

% mkdir $HOME/build2
% cd $HOME/build2
% cons -R /usr/all/repository こんにちは
短所「こんにちは」は最新です。

なぜコンスは、 こんにちは 存圚しない堎合、プログラムは最新です こんにちは プログラムむン
ロヌカルビルドディレクトリ? リポゞトリ (ロヌカル ディレクトリではない) には
最新 こんにちは プログラム、および Cons は䜕もする必芁がないこずを正しく刀断したす。
このファむルの最新のコピヌを再構築したす。

ただし、倚くの堎合、ロヌカル コピヌの
ファむルは垞に存圚したす。 たずえば、パッケヌゞ化たたはテスト スクリプトは、特定の
生成されたファむルはロヌカルに存圚したす。 これらの補助スクリプトを認識させる代わりに、
リポゞトリ ディレクトリでは、「Local」コマンドを 構築する or 城集兵 ファむルぞ
特定のファむルがロヌカル ビルド ディレクトリに存圚する必芁があるこずを指定したす。

ロヌカル qw(
こんにちは
);

次に、同じコマンドを再実行するず、Cons はプログラムのロヌカル コピヌを䜜成したす。
リポゞトリのコピヌ (そうしおいるこずを䌝えたす):

% cons -R /usr/all/repository こんにちは
/usr/all/repository/hello からの hello のロヌカル コピヌ
短所「こんにちは」は最新です。

ロヌカル コピヌを䜜成する行為は、
こんにちは ファむル、Cons はただ最新であるず報告しおいたす。

ロヌカル コピヌの䜜成は、
`Install' コマンドで䞭間ディレクトリ (他のディレクトリず共有するため)。
ファむルの `Install' コマンドに付随する `Local' コマンドを䜿甚するず、
䞡方を行う䟿利な方法ずしお、Cons が `Install_Local' コマンドを提䟛しおいるこずはよく知られおいたす。

Install_Local $env, '#export', 'hello';

ずたったく同じです

むンストヌル $env '#export', 'hello';
ロヌカル '#゚クスポヌト/こんにちは';

「Local」コマンドず「Install_Local」コマンドはどちらもロヌカルを曎新したす 。委蚗 のファむル
今埌のビルドが正しく実行されるように、適切なファむル眲名。

倉庫 䟝存関係 分析

組み蟌みのスキャンにより、Cons は指定されたリポゞトリ ツリヌで含たれおいるものを怜玢したす。
.h ファむル。 ただし、コンパむラがリポゞトリ ツリヌに぀いおも認識しおいない限り、
芋぀けるこずができたせん .h リポゞトリにのみ存圚するファむル。 たずえば、 こんにちはC
ファむルには こんにちは。 珟圚のディレクトリのファむル:

% cons -R /usr/all/repository こんにちは
gcc -c /usr/all/repository/hello.c -o hello.o
/usr/all/repository/hello.c:1: hello.h: そのようなファむルやディレクトリはありたせん

この問題を解決するず、建蚭環境のあり方にいく぀かの芁件が匷制されたす
ファむルをむンクルヌドするために C の `#include' プリプロセッサ ディレクティブが䜿甚されるように定矩されおいたす。

リポゞトリ ツリヌに぀いおコンパむラに通知するために、Cons は適切な `-I' を远加したす。
フラグをコンパむル コマンドに远加したす。 これは、
コンストラクト環境では、怜玢するすべおのサブディレクトリを明瀺的に指定する必芁がありたす
珟圚のディレクトリを含む、含たれるファむルの堎合。 その結果、䞊蚘を修正できたす
での環境䜜成の倉曎による䟋 構築する ファむルを次のようにしたす。

$env = 新しいコンス(
CC => 'gcc',
CPPPATH => '.',
LIBS => 'libworld.a',
);

`CPPPATH' 倉数の定矩により、これは、
コマンド

% cons -R /usr/all/repository こんにちは
gcc -c -I。 -I/usr/all/repository /usr/all/repository/hello.c -o hello.o
gcc -o こんにちは hello.o /usr/all/repository/libworld.a

`-I' フラグの順序は、C プリプロセッサの堎合、同じリポゞトリを耇補したす。
Cons が独自の䟝存関係分析に䜿甚するディレクトリ怜玢パス。 ある堎合
耇数のリポゞトリず耇数の「CPPPATH」ディレクトリ、コンスはリポゞトリを远加したす
ディレクトリを各 `CPPPATH' ディレクトリの先頭に移動し、その数を急速に増やしたす
`-I' フラグの。 極端な䟋ずしお、 構築する 以䞋を含むファむル:

リポゞトリ qw(
/ u1
/ u2
);

$env = 新しいコンス(
CPPPATH => 'a:b:c',
);

次のコンパむル コマンドが生成されたす。

cc -Ia -I/u1/a -I/u2/a -Ib -I/u1/b -I/u2/b -Ic -I/u1/c -I/u2/c -c hello.c -oこんにちは。

Cons はコンパむラの `-I' フラグに䟝存しお、
リポゞトリディレクトリは怜玢する必芁がありたす.Consのリポゞトリディレクトリの扱いは
C の `#include' ディレクティブでの二重匕甚笊の䜿甚ずは根本的に互換性がありたせん。
゜ヌスコヌド

#include "file.h" /* このような二重匕甚笊は䜿甚しないでください */

これは、ほずんどの C プリプロセッサが、このようなディレクティブに盎面するず、垞に最初に
゜ヌスファむルを含むディレクトリを怜玢したす。 これは粟巧な `-I' を匱䜓化させたす。
プリプロセッサを優先怜玢に適合させるために Cons が構築するオプション
パス。

したがっお、Cons でリポゞトリ ツリヌを䜿甚する堎合、 垞に 含たれるものには角かっこを䜿甚したす
ファむル

含む/* 代わりに山括匧を䜿甚 */

リポゞトリ_リスト

Cons は、すべおのリポゞトリ ディレクトリのリストを返す `Repository_List' コマンドを提䟛したす。
珟圚の怜玢順序で。 これは、デバッグや、より耇雑な Perl を実行するために䜿甚できたす。
もの

@list = リポゞトリ_リスト;
print join(' ', @list), "\n";

倉庫 盞互䜜甚   他の デメリット 機胜を䜿甚

Cons のリポゞトリ ツリヌの凊理は、他の Cons 機胜ず正しく盞互䜜甚したす。
぀たり、䞀般的に期埅どおりの動䜜をしたす。

最も顕著なのは、リポゞトリ ツリヌが「リンク」ず正しく、かなり匷力に盞互䜜甚するこずです。
指図。 リポゞトリ ツリヌには、バヌゞョン ビルド甚の XNUMX ぀以䞊のサブディレクトリが含たれる堎合がありたす
゜ヌスサブディレクトリぞの「リンク」を介しお確立されたす。 短所は掟生ファむルを怜玢したす
リポゞトリ ツリヌの䞋の適切なビルド サブディレクトリ。

デフォルト タヌゲット


これたで、ビルドする明瀺的なタヌゲットを指定しお Cons を呌び出す方法を瀺しおきたした。

% 短所こんにちは

通垞、Cons はタヌゲットを指定しない限り䜕もビルドしたせんが、'.' を指定したす。
珟圚のディレクトリはすべおを構築したす

% cons # 䜕もビルドしたせん

短所。 # 最䞊䜍ディレクトリの䞋にすべおをビルドしたす

「デフォルト」メ゜ッドを任意の 構築する or 城集兵 ファむルは指定された
タヌゲットをデフォルト タヌゲットのリストに远加したす。 ない堎合、短所はこれらのデフォルトを構築したす
コマンドラむンで指定されたタヌゲット。 したがっお、次の行をトップレベルに远加したす
構築する ファむルは、デフォルトですべおをビルドする Make の兞型的な動䜜を暡倣したす。

デフォルト '。';

以䞋は、 こんにちは & さようなら コマンド (コマンドず同じディレクトリ)
構築する or 城集兵 ファむル) をデフォルトのリストに远加したす。

デフォルト qw(
こんにちは
さようなら
);

「デフォルト」メ゜ッドは、タヌゲットをデフォルト リストに远加するために耇数回䜿甚できたす。

遞択的な 構築したす


Cons は、特定のビルドのサむズを瞮小するための XNUMX ぀の方法を提䟛したす。 XNUMX぀目は、指定するこずです
XNUMX ぀目は、ビルド ツリヌをプルヌニングする方法です。 良い
最初にタヌゲット仕様を怜蚎しおください。

遞択的な タヌゲット

make ず同様に、Cons ではコマンドラむンで「タヌゲット」を指定できたす。 短所の目暙
ファむルたたはディレクトリのいずれかです。 ディレクトリが指定されおいる堎合、これは単なる短いものです。
Consが知っおいるすべおの掟生補品の手曞き衚蚘は、指定された圢匏で
ディレクトリ以䞋。 䟋えば

% cons build/hello/hello.o

ビルドを意味したす こんにちは。 そしおそのすべお こんにちは。 必芁があるかもしれたせん。 これは前䜜から
のバヌゞョン こんにちは、 䞖界 プログラム こんにちは。 に䟝存
゚クスポヌト/むンクルヌド/world.h. そのファむルが最新でない堎合 (誰かが倉曎したため)
src/world/world.h)から離れたディレクトリにある堎合でも、再構築されたす。
ビルド/こんにちは.

この䟋では:

% コンスビルド

のすべお ビルド 必芁に応じお、ディレクトリが構築されたす。 繰り返したすが、これによりファむルが増える可胜性がありたす
構築する。 特に、䞡方 ゚クスポヌト/むンクルヌド/world.h & ゚クスポヌト/lib/libworld.a  
によっお必芁ずされる ビルド/こんにちは ディレクトリにあるため、それらが叀くなっおいる堎合はビルドされたす。

その堎合、代わりに:

% cons ゚クスポヌト

゚クスポヌト ディレクトリにむンストヌルする必芁があるファむルのみが再構築されたす。
し、そこにむンストヌルしたす。 `cons build' は `cons
export' はビルドされず、その逆も同様です。

いいえ 「特別」 タヌゲット

Cons を䜿甚するず、make スタむルの「特別な」タヌゲットは必芁ありたせん。 短所のある最も単玔なアナログ
特別に䜿うこずです export 代わりにディレクトリ。 たずえば、あなたが持っおいるずしたしょう
コヌドに関連付けられおいる䞀連の単䜓テスト党䜓。 テストは
コヌドの近くの゜ヌス ディレクトリ。 ただし、通垞、これらのテストを䜜成する必芁はありたせん。
XNUMX ぀の解決策は、テストを䜜成するためのすべおのビルド手順を提䟛しおから、
テストをツリヌの別の郚分にむンストヌルしたす。 テストをトップレベルにむンストヌルするず
呌ばれるディレクトリ テスト、その埌

% cons テスト

すべおのテストをビルドしたす。

% cons ゚クスポヌト

システムの本番バヌゞョンをビルドしたす (ただし、テストはビルドしたせん)。

% コンスビルド

おそらく避けるべきです (䞍必芁にテストをコンパむルするため)。

XNUMX ぀のテストだけを䜜成する堎合は、テストに明瀺的に名前を付けるこずができたす (
どちらか テスト ディレクトリたたは ビルド ディレクトリ。 テストを集玄するこずもできたす
tests ディレクトリ内の䟿利な階局に。 この階局は必芁ありたせん
むンクルヌド階局ずほが同じ方法で、必ず゜ヌス階局ず䞀臎したす。
゜ヌス階局ず䞀臎しない可胜性がありたす (むンクルヌド階局がそれ以䞊になる可胜性は䜎いです)
C プログラムの堎合は XNUMX レベルより深い)。

ツリヌ内のすべおを絶察に構築したい堎合 (どのようなオプションを遞択しおも
遞択)、次を䜿甚できたす。

短所。

これは、すべおのツリヌを冗長にたどるので、特に効率的ではありたせん。
゜ヌスツリヌを含みたす。 もちろん、゜ヌス ツリヌにはビルド可胜なオブゞェクトが含たれる堎合がありたす。
それ-通垞は別のビルドでビルドする堎合でも、これを行うこずを劚げるものは䜕もありたせん
ツリヌ。

完成に向けおあなたの背䞭を抌しおくれる、執筆のための持続可胜で本物のモヌメンタムを䜜り出す。 剪定


タヌゲット遞択ず合わせお、 ビルド 剪定 の範囲を瞮小するために䜿甚できたす。
建おる。 前の peAcH ず baNaNa の䟋では、スクリプト駆動型の
ビルドのプルヌニングを䜿甚しお、朜圚的なビルドの半分だけを特定の目的で䜿甚できるようにするこずができたす。
「cons」の呌び出し。 短所 たた、䟿宜䞊、コマンド ラむン芏則を提䟛したす。
を指定できたす 城集兵 ファむルは実際に「ビルド」されたす。぀たり、組み蟌たれたす。
ビルドツリヌに。 䟋えば

% cons ビルド + ワヌルド

`+' 匕数は、Perl 正芏衚珟を導入したす。 もちろん、これは次の堎所で匕甚する必芁がありたす。
匏内にシェルのメタ文字がある堎合は、シェル レベル。 の
匏はそれぞれに察しお照合されたす 城集兵 「ビルド」で蚀及されたファむル
名前が䞀臎するスクリプトのみが実際に
ツリヌを構築したす。 耇数のそのような匕数が蚱可され、その堎合、それらのいずれかず䞀臎したす
スクリプトを含めるには十分です。

䞊蚘の䟋では、 こんにちは Consには䜕もないので、プログラムはビルドされたせん
スクリプトの知識 こんにちは/城兵を遞択したす。 libworld.a ただし、アヌカむブは構築されたす
する必芁がありたす。

コマンド ラむンによるビルドのプルヌニングには、いく぀かの甚途がありたす。 おそらく最も有甚な
ロヌカルな倉曎を行う胜力であり、その埌、
これらの倉曎の結果、高速化するためにビルド ツリヌのサむズを制限したす。
再構築時間。 ビルド プルヌニングの XNUMX ぀目の甚途は、再コンパむルを積極的に防止するこずです。
たずえば、倉曎されたヘッダヌ ファむルが原因で再コンパむルされるこずがわかっおいる特定のファむル。
ヘッダヌ ファむルぞの倉曎が重芁ではないか、たたは
倉曎は、テスト目的で、ほずんどのツリヌで安党に無芖できたす。
ずいう理解のもずで、この皮の行動を認めるこずが実際的であるずいう芋解です。
次の完党なビルドでは、再構築する必芁があるすべおのものになりたす。 同等のものはありたせん
ファむルを氞久に最新のものずしおマヌクするために、「make touch」コマンドに。 したがっお、あらゆるリスクは
ビルドのプルヌニングによっお発生する負荷が軜枛されたす。 リリヌス品質の䜜業に぀いおは、明らかに、お勧めしたす
ビルドのプルヌニングを䜿甚しないこず (統合䞭に䜿甚しおも問題ありたせんが、
コンパむルのチェックなど。コミットする前に、必ず制玄のないビルドを実行しおください。
統合。

䞀時的な オヌバヌラむド


Cons は、ビルドの偎面をオヌバヌラむドするための非垞に単玔なメカニズムを提䟛したす。 本質は
XNUMX ぀たたは耇数の「オヌバヌラむド」コマンドを含むオヌバヌラむド ファむルを䜜成し、
`cons' を実行するずき、コマンドラむンでこれを指定したす:

% cons -o over ゚クスポヌト

を構築したす export ディレクトリ、存圚するオヌバヌラむドの察象ずなるすべおの掟生ファむル
セクションに が ファむル。 `-o' オプションを省略するず、削陀に必芁なすべおのものが削陀されたす。
すべおのオヌバヌラむドが再構築されたす。

オヌバヌラむド 環境 variables

オヌバヌラむド ファむルには、XNUMX 皮類のオヌバヌラむドを含めるこずができたす。 XNUMX぀目は受信環境
倉数。 これらは通垞、 構築する `%ENV' ハッシュからのファむル
倉数。 これらは、䞊曞きファむルで簡単に䞊曞きできたす。
`%ENV' の適切な芁玠 (これらはナヌザヌの環境でオヌバヌラむドされる可胜性もありたす。
もちろん。

  オヌバヌラむド command

XNUMX 番目のタむプのオヌバヌラむドは、次のような `Override' コマンドで実珟されたす。
この

オヌバヌラむド、 => 、 => 、...;

正芏衚珟 正芏衚珟 候補であるすべおの掟生ファむルに察しお照合されたす
ビルドのために。 掟生ファむルが䞀臎する堎合、倉数/倀のペアが䜿甚されたす
掟生ファむルに関連付けられたコンストラクション環境の倀をオヌバヌラむドしたす。

次のような構築環境があるずしたす。

$CONS = 新しいコンス(
COPT => '',
CDBG => '-g',
CFLAGS => '%COPT %CDBG',
);

次に、オヌバヌラむドファむルがある堎合 が このコマンドを含む

オヌバヌラむド '\.o$', COPT => '-O', CDBG => '';

次に、`-o over' を指定した `cons' 呌び出しが䜜成されたす。 .o この環境を介したファむルは
`-O' を指定しお `-g' を指定せずにコンパむルしたす。 もちろん、オヌバヌラむドは
正芏衚珟を適切に遞択するこずにより、単䞀のディレクトリに制限されたす。

これがHello, World!のオリゞナルバヌゞョンです。 この環境で構築されたプログラム。
オヌバヌラむドが適甚たたは削陀されるず、Cons は適切な郚分を再構築するこずに泚意しおください。

% 短所こんにちは
cc -g -c ハロヌ.c -o ハロヌ.o
cc -o こんにちは hello.o
% cons -o over hello
cc -O -c こんにちは。c -o こんにちは。o
cc -o こんにちは hello.o
% cons -o over hello
短所「こんにちは」は最新です。
% 短所こんにちは
cc -g -c ハロヌ.c -o ハロヌ.o
cc -o こんにちは hello.o

「Override」コマンドは䞀時的なオンザフラむでのみ䜿甚するこずが重芁です
オヌバヌラむドはプラットフォヌムに䟝存しないため、開発に必芁なオヌバヌラむド
スクリプトの動䜜に関する詳现な知識に頌りすぎおいるためです。 為に
䞀時的な䜿甚ですが、たさにあなたが望むものです。

たずえば、完党に最適化された
本番甚システムのバヌゞョン -- から 構築する & 城集兵 ファむル。 こちらです
最適化されたシステムをプラットフォヌムに合わせお調敎できたす。 オプティマむザヌのトレヌドオフが必芁な堎所
䜜成されたす (たずえば、特定のファむルは完党な最適化でコンパむルされない堎合がありたす)。
これらは、埌䞖 (および再珟性) のためにスクリプトに盎接蚘録できたす。

その他 on 建蚭 環境


デフォルト 建蚭 variables

の抂念に぀いお蚀及し、䜿甚したした。 建蚭 環境、䜕床も
前のペヌゞ。 ここで、これをもう少し具䜓的にしたす。 以䞋で
ステヌトメント

$env = 新しいコンス();

新しいデフォルト コンストラクション環境ぞの参照が䜜成されたす。 これには数字が含たれおいたす
構成倉数ずいく぀かのメ゜ッドの。 珟時点では、デフォルトのリストは
構成倉数は次のように定矩されたす。

CC => 'cc',
CFLAGS => '',
CCCOM => '%CC %CFLAGS %_IFLAGS -c %< -o %>',
INCDIRPREFIX => '-I',
CXX => '%CC',
CXXFLAGS => '%CFLAGS',
CXXCOM => '%CXX %CXXFLAGS %_IFLAGS -c %< -o %>',
リンク => '%CXX',
LINKCOM => '%LINK %LDFLAGS -o %> %< %_LDIRS %LIBS',
LINKMODULECOM => '%LD -r -o %> %<',
LIBDIRPREFIX => '-L',
AR => 'ar',
ARFLAGS => 'r',
ARCOM => "%AR %ARFLAGS %> %<\n%RANLIB %>",
RANLIB => 'RANLIB',
AS => 'as',
ASFLAGS => '',
ASCOM => '%AS %ASFLAGS %< -o %>',
LD => 'ld',
LDFLAGS => '',
PREFLIB => 'ラむブラリ',
SUFLIB => '.a',
SUFLIBS => '.so:.a',
SUFOBJ => '.o',
ENV => { 'パス' => '/ binに:/ usr / bin' }、

Win32 システム (Windows NT) では、次の構築倉数は
デフォルト

CC => 'cl',
CFLAGS => '/nologo',
CCCOM => '%CC %CFLAGS %_IFLAGS /c %< /Fo%>',
CXXCOM => '%CXX %CXXFLAGS %_IFLAGS /c %< /Fo%>',
INCDIRPREFIX => '/I',
リンク => 'リンク',
LINKCOM => '%LINK %LDFLAGS /out:%> %< %_LDIRS %LIBS',
LINKMODULECOM => '%LD /r /o %> %<',
LIBDIRPREFIX => '/LIBPATH:',
AR => 'lib',
ARFLAGS => '/nologo',
ARCOM => "%AR %ARFLAGS /out:%> %<",
RANLIB => '',
LD => 'リンク',
LDFLAGS => '/nologo',
PREFLIB => '',
SUFEXE => '.exe',
SUFLIB => '.lib',
SUFLIBS => '.dll:.lib',
SUFOBJ => '.obj',

これらの倉数は、環境に関連付けられたさたざたなメ゜ッドによっお䜿甚されたす。
特に、最終的に倖郚コマンドを呌び出すメ゜ッドは、これらを眮き換えたす
必芁に応じお、最終的なコマンドに倉数を远加したす。 たずえば、「オブゞェクト」メ゜ッドは
倚数の゜ヌス ファむルず、必芁に応じお、察応するオブゞェクトの掟生を手配したす。
ファむル。 䟋えば

オブゞェクト $env 'foo.c', 'bar.c';

これにより、必芁に応じお、 ふヌ。 & バヌオヌ. 呌び出されるコマンドは単玔です
必芁な適切な倖郚コマンドに眮換によっお展開される `%CCCOM'
各オブゞェクトを構築したす。 「コマンド」の䞋で眮換芏則をさらに調べたす。
メ゜ッド、以䞋。

構築倉数は他の目的にも䜿甚されたす。 たずえば、`CPPPATH' は
むンクルヌド ディレクトリのパスをコロンで区切っお指定するために䜿甚されたす。 これらは意図されおいたす
C プリプロセッサに枡され、C ファむル スキャン機構によっおも䜿甚されたす。
C コンパむルに含たれる䟝存関係を決定したす。 で始たる倉数
アンダヌスコアはさたざたな方法で䜜成され、通垞は「内郚」ず芋なされたす。
倉数。 たずえば、オブゞェクトの䜜成を呌び出すメ゜ッドが呌び出されたずき
C ゜ヌスから、倉数 `_IFLAGS' が䜜成されたす。これは `-I' スむッチに察応したす。
`CPPPATH' で指定されたディレクトリを衚すために C コンパむラで必芁ずされたす。

特定の環境の堎合、倉数の倀は䞀床蚭定され、その埌で蚭定されるこずに泚意しおください。
リセットしない (倉数を倉曎するには、新しい環境を䜜成する必芁がありたす。メ゜ッドが提䟛されおいたす
この目的のために既存の環境をコピヌする堎合)。 次のようないく぀かの内郚倉数
`_IFLAGS' はオンデマンドで䜜成されたすが、䞀床蚭定されるず、
環境。

`CFLAGS'、`LDFLAGS'、および `ARFLAGS' 倉数はすべお、オプションを枡す堎所を提䟛したす。
それぞれ、コンパむラヌ、ロヌダヌ、およびアヌカむバヌ。 それほど明癜ではありたせんが、`INCDIRPREFIX'
倉数は、各むンクルヌドの先頭に远加するオプション文字列を指定したす
コンパむラがどこを芋぀けるかを知るためのディレクトリ .h ファむル。 同様に、
`LIBDIRPREFIX' 倉数は、先頭に远加するオプション文字列を指定したす
リンカヌがラむブラリを怜玢する必芁がある各ディレクトリ。

別の倉数「ENV」は、実行䞭のシステム環境を決定するために䜿甚されたす。
倖郚コマンドの。 デフォルトでは、蚭定されおいる唯䞀の環境倉数は「PATH」です。
UNIX コマンドの実行パスです。 最倧限の再珟性を埗るには、
トップレベルで、実際に独自の実行パスを蚭定するように手配したす 構築する ファむル (たたは
おそらく、Perl の「use」コマンドで適切な構築パッケヌゞをむンポヌトするこずによっお)。 の
デフォルト倉数は、すぐに䜿甚できるようにするこずを目的ずしおいたす。

補間 建蚭 variables

コンストラクション環境倉数は、゜ヌス ファむル名ずタヌゲット ファむル名で補間される堎合がありたす
構築倉数名の前に `%' を付けたす。

$env = 新しいコンス(
DESTDIR => 'プログラム',
SRCDIR => 'src',
);
プログラム $env '%DESTDIR/hello', '%SRCDIR/hello.c';

構成倉数の展開は再垰的です。぀たり、ファむル 名(s) は再
眮換ができなくなるたで拡匵されたす。 構成倉数がそうでない堎合
環境で定矩されおいる堎合、ヌル文字列が眮き換えられたす。

デフォルト 建蚭 メ゜ッド


デフォルトの構築方法のリストには、次のものが含たれたす。

  「新しい」 コンストラクタ

`new' メ゜ッドは Perl オブゞェクト コンストラクタです。 ぀たり、参照を介しお呌び出されたせん
既存の建蚭環境に 参照、しかし、かなり静的に、名前を䜿甚しお
パヌルの パッケヌゞ コンストラクタヌが定矩されおいる堎所。 メ゜ッドは次のように呌び出されたす。

$env = 新しいコンス( );

戻っおきた環境は、パッケヌゞ `cons' にブレスされおいたす。
以䞋で説明するデフォルトのメ゜ッドが関連付けられおいたす。 個別斜工
オヌバヌラむド リストに名前ず倀のペアを指定するこずで、倉数をオヌバヌラむドできたす。 ご了承ください
コマンド環境倉数 (぀たり、「ENV」の䞋にあるもの) をオヌバヌラむドするには、次のようにする必芁がありたす。
それらすべおをオヌバヌラむドしたす。 この問題を回避するには、「copy」メ゜ッドを
既存の建蚭環境。

  「クロヌン」 方法

`clone' メ゜ッドは、既存のコンストラクション環境のクロヌンを䜜成したす。
次の䟋のように呌び出されたす。

$env2 = $env1->clone( );

通垞の方法でオヌバヌラむドを提䟛しお、別の環境を䜜成できたす。
オリゞナル。 同じ環境に新しい名前が必芁な堎合 (これは、
環境を既存のコンポヌネントに゚クスポヌトする堎合)、単玔な割り圓おを䜿甚するだけです。

  「コピヌ」 方法

「copy」メ゜ッドは、倖郚で定矩された構成倉数を
それらを名前ず倀のペアのリストずしお返したす。 オヌバヌラむドも可胜
その堎合、必芁に応じおオヌバヌラむドされた倀が返されたす。 の
以䞋のプロトタむプに瀺すように、返されたリストをハッシュに割り圓おるこずができたすが、
他の方法で操䜜する:

%env = $env1->copy( );

それ自䜓がハッシュである「ENV」の倀も新しいハッシュにコピヌされるため、これは
元の環境に圱響を䞎えるこずを恐れずに倉曎したす。 たずえば、あなたが本圓に
デフォルト環境で `PATH' 倉数だけをオヌバヌラむドしたい堎合は、次のようにしたす。
次のずおりです。

%cons = new cons()->copy();
$cons{ENV}{PATH} = " ";
$cons = 新しい cons(%cons);

これにより、デフォルトの実行環境にある可胜性のある他のものはすべお残されたす
平静な。

  「むンストヌル」 方法

`Install' メ゜ッドは、指定されたファむルが指定された堎所にむンストヌルされるように手配したす。
ディレクトリ。 むンストヌルは最適化されおいたす。リンクできる堎合、ファむルはコピヌされたせん。 もしも
これは望たしい動䜜ではありたせん。別の方法でむンストヌルする必芁がありたす。
ファむル。 次のように呌ばれたす。

$env をむンストヌル、 ;

むンストヌルされるファむルの名前は任意ですが、最埌の
各名前のコンポヌネントは、むンストヌルされたタヌゲット名に䜿甚されたす。 たずえば、
むンストヌルするように手配する foo / bar in バズ、これは バヌ 内のファむル バズ ディレクトリではない
foo / bar).

  「InstallAs」 方法

`InstallAs' メ゜ッドは、指定された゜ヌスを手配したす file(s) ずしおむンストヌルする
指定されたタヌゲット file秒。 耇数のファむルをファむル リストずしお指定する必芁がありたす。 の
むンストヌルが最適化されたす。リンクできる堎合、ファむルはコピヌされたせん。 これが
必芁な動䜜を行うには、別の方法を䜿甚しおファむルをむンストヌルする必芁がありたす。 それは
次のように呌ばれたす

`InstallAs' は XNUMX ぀の方法で動䜜したす:

単䞀ファむルのむンストヌル:

$env TgtFile、SrcFile ずしおむンストヌルしたす。

耇数ファむルのむンストヌル:

InstallAs $env ['tgt1', 'tgt2'], ['src1', 'src2'];

たたは、次のようにも:

@srcs = qw(src1 src2 src3);
@tgts = qw(tgt1 tgt2 tgt3);
InstallAs $env [@tgts], [@srcs];

タヌゲット リストず゜ヌス リストの䞡方が同じ長さである必芁がありたす。

  「貎重な」 方法

`Precious' メ゜ッドは、指定されたファむルたたはファむルのリストを以前に削陀しないように cons に芁求したす。
それらを再び構築したす。 次のように呌び出されたす。

貎重;

これは、ラむブラリの増分曎新やデバッグを蚱可する堎合に特に䟿利です
毎回新しく再構築されるのではなく、曎新される情報ファむル。 短所はただ
`-r' フラグが指定されおいる堎合、ファむルを削陀したす。

  「コマンド」 方法

「コマンド」メ゜ッドは、あらゆる倖郚コマンドを手配するために䜿甚できるキャッチオヌル メ゜ッドです。
タヌゲットを曎新するために呌び出されるコマンド。 このコマンドでは、タヌゲット ファむルず
入力が提䟛されたす。 さらに、構築コマンド ラむンたたは耇数のラむンが、
文字列 (この文字列には、new で区切られた耇数のコマンドが埋め蟌たれおいる堎合がありたす
行。 「コマンド」は次のように呌び出されたす。

コマンド $env 、 、 ;

タヌゲットは、指定された入力ファむルのリストに䟝存するようになり、入力は
そうしないず、Cons はタヌゲットのビルドを詊行したせん。

構築コマンド内では、構築環境からの任意の倉数を
構成倉数の名前の前に `%' を付けるこずで導入されたす。 これは再垰的です:
コマンドは、眮換ができなくなるたで展開されたす。 建蚭であれば
variable が環境で定矩されおいない堎合は、null 文字列が眮き換えられたす。 あ
二重化された `%%' は、構築コマンドで単䞀の `%' に眮き換えられたす。

展開される疑䌌倉数がいく぀かありたす。

%> タヌゲット ファむル名 (マルチタヌゲット コマンドでは、これは垞に最初のタヌゲットです)
蚀及された。

%0 `%>' ず同じ。

%1、%2、...、%9
これらは、それぞれ XNUMX 番目から XNUMX 番目の入力ファむルを参照したす。

%< 入力の完党なセット。 これらのいずれかが他の堎所で䜿甚されおいる堎合
珟圚のコマンド ラむン (`%1'、`%2' などを介しお)、それらは
`%<' によっお提䟛されるリスト。 で芋぀かった次のコマンドを怜蚎しおください 城集兵 file
セクションに test ディレクトリ

コマンド $env 'tgt', qw(foo bar baz), qq(
゚コヌ %< -i %1 > %>
゚コヌ %< -i %2 >> %>
゚コヌ %< -i %3 >> %>
);

If tgt 曎新する必芁がある堎合、これにより、
次のコマンドは、再マッピングが確立されおいないず想定しおいたす。 test
ディレクトリ

゚コヌ テスト/バヌ テスト/baz -i テスト/foo > テスト/tgt
echo test/foo test/baz -i test/bar >> test/tgt
echo test/foo test/bar -i test/baz >> test/tgt

䞊蚘の疑䌌倉数のいずれかの盎埌に、次のいずれかが続く堎合がありたす。
展開されたパス名の䞀郚を遞択するサフィックス:

:a ファむル名ぞの絶察パス
:b ディレクトリに接尟蟞を取り陀いたファむル名を加えたもの
:d ディレクトリ
:f ファむル名
:s ファむル名のサフィックス
:F 接尟蟞を取り陀いたファむル名

䞊蚘の䟋を続けるず、`%<:f' は `foo bar baz' に展開され、`%':d> は
「テスト」に展開したす。

コマンドの䞀郚を囲むこずにより、プログラムでコマンドの䞀郚を曞き換えるこずができたす
`%[' ず `%]' の間。 これは、最初の単語ずしお名前が付けられた構築倉数を呌び出したす
Perl コヌド参照ずしお括匧で囲たれおいたす。 この呌び出しの結果が䜿甚されたす
コマンドラむンの括匧の内容を眮き換えたす。 たずえば、
ずいう名前の既存の入力ファむル tgt.in:

@keywords = qw(foo bar baz);
$env = new cons(X_COMMA => sub { join(",", @_) });
コマンド $env 'tgt', 'tgt.in', qq(
echo '# キヌワヌド: %[X_COMMA @keywords %]' > %>
猫 %< >> %>
);

これは実行されたす

echo '# キヌワヌド: foo、bar、baz' > tgt
猫 tgt.in >> tgt

眮換が行われた埌、空癜文字列は単䞀の空癜に倉換され、
先頭ず末尟の空癜は削陀されたす。 よっお玹介䞍可
コマンドに枡される文字列内の可倉長の空癜。
䞀皮のシェル匕甚。

耇数行のコマンド文字列が指定されおいる堎合、コマンドは順番に実行されたす。 もしあれば
コマンドのうちの XNUMX ぀が倱敗するず、残りのコマンドは実行されず、タヌゲットは次のようにマヌクされたせん。
぀たり、タヌゲットの新しい眲名は保存されたせん。

通垞、すべおのコマンドが成功し、れロのステヌタスが返された堎合 (たたはプラットフォヌムが䜕であれ、
成功の特定の指瀺が必芁)、新しい眲名が保存されたす。
目暙。 コマンドが倱敗した埌でも誀っお成功を報告した堎合、Cons は次のこずを行いたす。
そのコマンドによっお䜜成されたタヌゲット ファむルが正確で最新のものであるず想定したす。

展開埌の各コマンド文字列の最初の単語は、実行可胜ファむルであるず芋なされたす
コマンドは、'PATH' 環境倉数 (これは、
「ENV」構成倉数)。 このコマンドがパス䞊にある堎合、タヌゲットは
したがっお、コマンドは必芁に応じお自動的に構築されたす。 これは
䞀郚のシェルでは、セミコロンで区切られたマルチパヌト コマンドを蚘述できたす。 のみ
ただし、最初のコマンドワヌドは䟝存するため、コマンド文字列を蚘述する堎合
この方法では、(`Depends' メ゜ッドを䜿甚しお) 䟝存関係を明瀺的に蚭定するか、たたは
䜿甚しおいるコマンドがシステム コマンドであるこずを確認しおください。
利甚可胜。 利甚できない堎合は、圓然、゚ラヌが発生したす。

いずれかのコマンド (耇数行のコマンド内の XNUMX ぀でも) が `[perl]' で始たる堎合、残りは
そのコマンド ラむンの
シェル。 Perl の解析䞭に゚ラヌが発生した堎合、たたは Perl 匏が 0 たたは
undef の堎合、コマンドは倱敗したず芋なされたす。 たずえば、これは簡単です
Perl から盎接ファむル `foo' を䜜成するコマンド:

$env = 新しいコンス();
コマンド $env 'foo',
qq([perl] open(FOO,'>foo');print FOO "hi\\n"; close(FOO); 1);

コマンドが実行されるずき、あなたは同じパッケヌゞにいるこずに泚意しおください 構築する
or 城集兵 ファむルが読み蟌たれたので、同じファむル内で定矩した Perl 関数を呌び出すこずができたす
構築する or 城集兵 「コマンド」が衚瀺されるファむル:

$env = 新しいコンス();
サブ create_file {
私の $file = シフト;
open(ファむル、">$ファむル");
print FILE "hi\n";
closeFILE;
1リタヌン;
}
コマンド $env 'foo', "[perl] &create_file('%>')";

Perl 文字列は、掟生ファむルの眲名を生成するために䜿甚されたす。
文字列を倉曎するず、ファむルが再構築されたす。 呌び出すサブルヌチンの内容、
ただし、眲名の䞀郚ではないため、次のような呌び出されたサブルヌチンを倉曎するず
䞊蚘の `create_file' では、タヌゲットは 再構築されたす。 ナヌザヌに譊告したす。

Cons は通垞、コマンドを実行する前に出力したす。 この動䜜は、
コマンドの最初の文字は `@' です。 `@' を
コマンド名たたはそれを゚スケヌプしお、`@cmd' が Perl の匕甚に配列のように芋えないようにしたす
補間を実行する挔算子:

# 最初のコマンド ラむンが正しくありたせん。
# "@cp" は配列のように芋えるため
# Perl qq// 関数に。
# 代わりに XNUMX 番目の圢匏を䜿甚したす。
コマンド $env 'foo', 'foo.in', qq(
@cp %< 䞀時ファむル
@ cp 䞀時ファむル %>
);

展開されたコマンド ラむンのどこかに `<' などのシェル メタ文字がある堎合、
`>'、匕甚笊、たたはセミコロンを䜿甚するず、コマンドは実際に実行されたす。
シェル。 これは、次のようなコマンドを意味したす。

CD フヌ

パス䞊にコマンド `cd' がないため、単独では通垞倱敗したす。 しかし、コマンド
文字列

CD $<:d; tar cf $>:f $<:f

展開するず、シェルのメタ文字セミコロンが匕き続き含たれ、シェルは
コマンドを解釈するために呌び出されたす。 `cd' はこのサブシェルによっお解釈されるため、コマンド
期埅どおりに実行されたす。

耇数のタヌゲットを持぀コマンドを指定するには、次のリストぞの参照を指定できたす。
タヌゲット。 Perl では、リストを角括匧で囲むこずによっおリスト参照を䜜成できたす。
したがっお、次のコマンド

コマンド $env ['foo.h', 'foo.c'], 'foo.template', q(
䞖代 %1
);

コマンド `gen' が XNUMX ぀のファむルを䜜成する堎合に䜿甚できたす。 ふヌ。 & foo.c.

  「オブゞェクト」 方法

`Objects' メ゜ッドは、指定されたオブゞェクトに察応するオブゞェクト ファむルを䜜成するように手配したす。
゜ヌスファむル。 以䞋に瀺すように呌び出されたす。

@files = オブゞェクト $env ;

Unix では、゜ヌスファむルの末尟は .s & .c 珟圚サポヌトされおおり、コンパむルされる予定です
で終わる同じファむルの名前に .o. デフォルトでは、すべおのファむルは呌び出しによっお䜜成されたす
`CCCOM' 構成倉数を展開した結果の倖郚コマンド。
`%<' ず `%>' は、それぞれ゜ヌス ファむルずオブゞェクト ファむルに蚭定されたす (`Command' メ゜ッドを参照しおください)。
拡匵の詳现に぀いお)。 倉数 `CPPPATH' は、゜ヌス ファむルをスキャンするずきにも䜿甚されたす
䟝存関係のために。 これはコロンで区切られたパス名のリストであり、䜜成にも䜿甚されたす
-`I' の適切なリストを含む構築倉数 `_IFLAGS'
コンパむルのオプション。 `CPPPATH' 内の盞察パス名はすべお盞察パスずしお解釈されたす
関連付けられたコンストラクション環境が䜜成されたディレクトリ (絶察
および最䞊䜍の盞察名も䜿甚できたす)。 この倉数は「CCCOM」によっお䜿甚されたす。 振る舞い
このコマンドの倀は、補間される倉数を倉曎するこずで倉曎できたす
`CC' や `CFLAGS' などの `CCCOM' に、間接的には `CPPPATH' に。 するこずも可胜です
`CCCOM' 自䜓の倀を眮き換えたす。 䟿宜䞊、このファむルは次のリストを返したす。
オブゞェクトのファむル名。

  「プログラム」 方法

「Program」メ゜ッドは、指定されたプログラムを指定されたオブゞェクトにリンクするように手配したす
ファむル。 次の方法で呌び出されたす。

プログラム $env 、 ;

プログラム名には、`SUFEXE' 構造倉数の倀が远加されたす (
デフォルトでは、Win32 システムでは `.exe'、Unix システムでは䜕もありたせん) 接尟蟞がただない堎合
プレれント。

オブゞェクトファむルの代わりに゜ヌスファむルを指定するこずができたす -- `Objects' メ゜ッドは
すべおのファむルをオブゞェクト ファむルに倉換するために呌び出されるため、すべおの
䞊蚘の「オブゞェクト」メ゜ッドに関する芳察は、このメ゜ッドにも適甚されたす。

プログラムの実際のリンクは、倖郚コマンドによっお凊理されたす。
オブゞェクトファむルに蚭定された `%<' を䜿甚しお `LINKCOM' 構築倉数を展開するこずから
(提瀺された順序で) リンクされ、`%>' がタヌゲットに蚭定されたす (`Command' メ゜ッドを参照しおください)。
拡匵の詳现に぀いお)。 ナヌザヌは、構造に远加の倉数を蚭定できたす
リンクに䜿甚するプログラムを定矩するための「LINK」を含む環境、「LIBPATH」、
のラむブラリ仕様で䜿甚するための、ラむブラリ怜玢パスのコロンで区切られたリスト。
フォヌム -llib、および `LIBS' で、リンクするラむブラリのリストを指定したす (いずれかで -llib
フォヌムたたは単にパス名ずしお。 `LIBPATH' ず `LIBS' の䞡方の盞察パス名が解釈されたす
関連付けられたコンストラクション環境が䜜成されたディレクトリに盞察的
(絶察名ず䞊䜍盞察名も䜿甚できたす)。 短所は自動的に蚭定されたす
`LIBS' に蚘述されおいるラむブラリぞの䟝存: これらのラむブラリはビルド前にビルドされたす。
コマンドがリンクされおいたす。

  「図曞通」 方法

「Library」メ゜ッドは、指定されたオブゞェクトから指定されたラむブラリを䜜成するように手配したす
ファむル。 次のように呌び出されたす。

ラむブラリ $env 、 ;

ラむブラリ名には、`SUFLIB' 構成倉数の倀が远加されたす (
デフォルトでは、Win32 システムでは `.lib'、Unix システムでは `.a')、接尟蟞がただない堎合
プレれント。

オブゞェクトファむルの代わりに゜ヌスファむルを指定するこずができたす -- `Objects' メ゜ッドは
すべおのファむルをオブゞェクト ファむルに倉換するために呌び出されるため、すべおの
䞊蚘の「オブゞェクト」メ゜ッドに関する芳察は、このメ゜ッドにも適甚されたす。

ラむブラリの実際の䜜成は、倖郚コマンドによっお凊理されたす。
ラむブラリメンバヌに蚭定された `%<' を䜿甚しお、`ARCOM' 構築倉数を展開するこずから (
提瀺された順序)、`%>' を䜜成するラむブラリに指定 (`Command' メ゜ッドを参照)
拡匵の詳现)。 ナヌザヌはコンストラクション環境で倉数を蚭定できたす。
コマンドの動䜜に圱響したす。 これらには、䜿甚するアヌカむブプログラムである「AR」が含たれたす。
ARFLAGS は、AR によっお指定されたプログラムに䞎えられたフラグを倉曎するために䜿甚できたす。
必芁に応じお、アヌカむブ玢匕生成プログラムの名前である「RANLIB」(特定の
need が埌者の機胜を必芁ずしない堎合、`ARCOM' を再定矩しお、埌者の機胜を必芁ずしないようにする必芁がありたす。
`RANLIB' を参照)。

「Library」メ゜ッドを䜿甚するず、同じラむブラリを耇数のメ゜ッドで指定できたす
呌び出し。 すべおの呌び出しからのすべおの寄䞎オブゞェクト (これは、
異なるディレクトリ) が結合され、単䞀のアヌカむブ コマンドによっお生成されたす。 ノヌト、
ただし、ラむブラリの䞀郚のみが指定されるようにビルドを敎理するず、
ラむブラリのその郚分が生成されたす (残りは消えたす!)。

  「モゞュヌル」 方法

「Module」メ゜ッドは、「Program」メ゜ッドず「Command」メ゜ッドを組み合わせたものです。 それよりも
実行可胜プログラムを盎接生成する堎合、このコマンドを䜿甚するず、独自の
実際にモゞュヌルを生成するコマンド。 メ゜ッドは次のように呌び出されたす。

モゞュヌル $env 、 、 ;

このコマンドは、動的に䜜成する堎合などに圹立ちたす。
読み蟌たれたモゞュヌル、たたは静的にリンクされたコヌド ラむブラリ。

  「䟝存する」 方法

`Depends' メ゜ッドを䜿甚するず、タヌゲットに远加の䟝存関係を指定できたす。 それは
次のように呌び出されたす。

$env に䟝存、 ;

これは、特にスキャナヌが存圚しない堎合 (たたは存圚する堎合) に圹立぀堎合がありたす。
曞き蟌み可胜) 特定の皮類のファむル甚。 通垞、䟝存関係は蚈算されたす
メ゜ッドによっお蚭定された明瀺的な䟝存関係の組み合わせから自動的に
呌び出したたは゜ヌス ファむルのスキャンによっお。

耇数のタヌゲットに察する同䞀の䟝存関係のセットは、ぞの参照を䜿甚しお指定できたす。
タヌゲットのリスト。 Perl では、リストを四角で囲むこずでリスト参照を䜜成できたす。
ブラケット。 したがっお、次のコマンド

䟝存 $env ['foo', 'bar'], 'input_file_1', 'input_file_2';

䞡方の foo & バヌ ファむルは、リストされた入力ファむルに䟝存したす。

  「無芖する」 方法

`Ignore' メ゜ッドを䜿甚するず、Cons が掚論する䟝存関係を明瀺的に無芖できたす。
自分の。 次のように呌び出されたす。

無芖;

これは、システム ヘッダヌ ファむルの倉曎による再コンパむルを回避するために䜿甚できたす。
生成されたタヌゲットに圱響を䞎えないこずが知られおいるナヌティリティ。

たずえば、プログラムが耇数のシステム䞊の NFS マりントされたディレクトリに構築されおいる堎合、
の異なるコピヌを持぀ stdio.h、違いはすべおの眲名に圱響したす
`#include を含む゜ヌス ファむルから構築された掟生タヌゲット'。 これがすべおの原因になりたす
システムを倉曎するずきに、それらのタヌゲットを再構築する必芁がありたす。 これが望たしくない動䜜である堎合は、
次に、次の行で䟝存関係を削陀したす stdio.h ファむル

'^/usr/include/stdio\.h$' を無芖したす。

`Ignore' メ゜ッドの匕数は正芏衚珟であるため、特別なものであるこずに泚意しおください。
文字ぱスケヌプする必芁があり、文字の先頭たたは末尟を固定したい堎合がありたす。
`^' たたは `$' 文字を䜿甚した匏。

  「塩」 方法

「Salt」メ゜ッドは、導出されたすべおの眲名蚈算に定数倀を远加したす
ファむル。 次のように呌び出されたす。

゜ルト $string;

Salt 倀を倉曎するず、すべおの掟生ファむルが完党に再構築されたす。 これはするこずができたす
特定の必芁な状況で再構築を匷制するために䜿甚されたす。 䟋えば、

`uname -s` を゜ルトしたす。

オペレヌティング システムがオンの堎合は垞に、すべおの掟生ファむルの完党な再構築を匷制したす。
ビルドが実行される (「uname -s」によっお報告される) 倉曎。

  「UseCache」 方法

`UseCache' メ゜ッドは、共有される掟生ファむルのキャッシュを保持するよう Cons に指瀺したす。
同じプロゞェクトの別々のビルド ツリヌ間。

UseCache("キャッシュ/ ") ⎪⎪ warn("キャッシュディレクトリが芋぀かりたせん");

  「゜ヌスパス」 方法

`SourcePath' メ゜ッドは、ファむルの実際の゜ヌス パス名を返したす。
ビルド ディレクトリ内のパス名。 次のように呌び出されたす。

$path = ゜ヌスパス;

  「コンパス」 方法

`ConsPath' メ゜ッドは、指定されたパスが掟生ファむルである堎合に true を返し、
それ以倖の堎合は undef (false)。 次のように呌び出されたす。

$result = ConsPath ;

  「分割パス」 方法

`SplitPath' メ゜ッドは、デフォルトで区切られた文字列で耇数のパス名を怜玢したす。
オペレヌティング システムのパス セパレヌタ (UNIX システムでは「:」、Windows NT では「;」)、および
完党修食名を返したす。 次のように呌び出されたす。

@paths = スプリットパス;

`SplitPath' メ゜ッドは、'#' で始たる名前を適切なトップレベル ビルドに倉換したす。
名前 ('#' なし) を䜿甚し、盞察名をトップレベル名に倉換したす。

  「DirPath」 方法

`DirPath' メ゜ッドはビルド パスを返したす 名(s) ディレクトリたたはディレクトリのリスト。
次のように呌び出されたす。

$cwd = DirPath ;

DirPath メ゜ッドの最も䞀般的な甚途は次のずおりです。

$cwd = DirPath '.';

子䌚瀟の珟圚のディレクトリぞのパスを取埗する 城集兵 ファむルに゜フトりェアを指定する必芁がありたす。

  「ファむルパス」 方法

`FilePath' メ゜ッドはビルド パスを返したす 名(s) ファむルたたはファむルのリスト。 それは
次のように呌び出されたす。

$file = ファむルパス;

  「助けお」 方法

「Help」メ゜ッドは、ナヌザヌが「cons」を呌び出したずきに衚瀺されるヘルプ テキストを指定したす。
-h'. これは、特定のタヌゲット、倀、ビルドのドキュメントを提䟛するために䜿甚できたす。
ビルドツリヌのオプションなど。 次のように呌び出されたす。

ヘルプ;

「Help」メ゜ッドは XNUMX 回だけ呌び出すこずができ、通垞は先頭で指定する必芁がありたす。
レベル 構築する ファむルに゜フトりェアを指定する必芁がありたす。

拡匵 デメリット


オヌバヌラむド 建蚭 variables

Cons を拡匵するにはいく぀かの方法があり、難易床が異なりたす。 最も簡単な
メ゜ッドは、デフォルトの環境に基づいお、独自の構築環境を定矩するこずです。
ただし、特定のニヌズを反映するように倉曎されおいたす。 倚くの堎合、C ベヌスの堎合はこれで十分です。
アプリケヌション。 `new' コンストラクタず `clone' および `copy' メ゜ッドを䜿甚しお、
ハむブリッド環境を䜜成したす。 これらの倉曎は、基瀎ずなるものに察しお完党に透過的です。
城集兵 ファむル。

远加 新補品 メ゜ッド

もう少し厳しい倉曎が必芁な堎合は、`cons' に新しいメ゜ッドを远加するこずをお勧めしたす。
パッケヌゞ。 これは非垞に単玔な拡匵機胜の䟋です。
芁求された堎所にある tcl スクリプトですが、最初にスクリプトを線集しおプラットフォヌムを反映したす。
スクリプトにむンストヌルする必芁がある䟝存パス:

# cons::InstallScript - シェルのプラットフォヌム䟝存バヌゞョンを䜜成する
# 文字列 ``#!your-path-here'' をプラットフォヌム固有のものに眮き換えたスクリプト
# パス $BIN_DIR.

サブコン::InstallScript {
私の ($env, $dst, $src) = @_;
コマンド $env $dst, $src, qq(
sed s+your-path-here+$BIN_DIR+ %< > %>
chmod oug+x %>
);
}

このメ゜ッドは `cons' パッケヌゞで盎接定矩されおいるこずに泚意しおください (名前の前に
`cons::' を䜿甚)。 この方法で行われた倉曎は、すべおの環境でグロヌバルに衚瀺されたす。
次の䟋のように呌び出すこずができたす。

InstallScript $env "$BIN/foo", "foo.tcl";

䞀般性を少し改善するために、`BINDIR' 倉数を
匕数たたは構築環境から取埗された -- `%BINDIR' ずしお。

オヌバヌラむド メ゜ッド

メ゜ッドを「cons」名前空間に远加する代わりに、新しいパッケヌゞを定矩できたす
`cons' パッケヌゞから既存のメ゜ッドを継承し、他のメ゜ッドをオヌバヌラむドたたは远加したす。 これ
Perl の継承メカニズムを䜿甚しお実行できたす。

次の䟋では、暙準をオヌバヌラむドする新しいパッケヌゞ `cons::switch' を定矩しおいたす。
「ラむブラリ」メ゜ッド。 オヌバヌラむドされたメ゜ッドは、ラむブラリではなく、リンクされたラむブラリ モゞュヌルをビルドしたす
アヌカむブ。 新しいコンストラクタが提䟛されたす。 このコンストラクタヌで䜜成された環境は、
新しいラむブラリ メ゜ッドがありたす。 他の人はしたせん。

パッケヌゞの短所::スむッチ;
BEGIN {@ISA = '短所'}

サブニュヌ{
シフト;
新しいコンス(@_)を祝犏したす。
}

サブラむブラリ {
my($env) = シフト;
my($lib) = シフト;
my(@objs) = オブゞェクト $env @_;
コマンド $env $lib, @objs, q(
%LD -r %LDFLAGS %< -o %>
);
}

この機胜は、次の䟋のように呌び出すこずができたす。

$env = 新しい cons::switch(@overrides);
...
ラむブラリ $env 'lib.o', 'foo.c', 'bar.c';

呌び出す デメリット


`cons' コマンドは通垞、ビルド ツリヌのルヌトから呌び出されたす。 あ 構築する file
そのディレクトリに存圚する必芁がありたす。 `-f' 匕数が䜿甚されおいる堎合、代替 構築する
file を䜿甚するこずができたす (そしお、`cons' が cd するため、おそらく代替ルヌトも䜿甚できたす)。 構築する
ファむルを含むディレクトリ)。

`cons' がビルド ツリヌのルヌトの子から `-t' 匕数で呌び出されるず、
ディレクトリ階局を䞊っお、 構築する ファむル。 (別の名前でも構いたせん
コマンドラむンで指定されたタヌゲットは倉曎されたす。
発芋されたものに関連する 構築する ファむル。 たずえば、次を含むディレクトリから
トップレベル 構築する ファむル、次の呌び出し:

% cd libfoo/サブディレクトリ
% cons -t タヌゲット

ずたったく同じです

% cons libfoo/subdir/target

ディレクトリ階局に「デフォルト」タヌゲットが指定されおいる堎合 構築する or
城集兵 `cons -t' を実行したディレクトリ以䞋のデフォルトのタヌゲットのみ
呌び出されたものがビルドされたす。

コマンドは次のように呌び出されたす。

短所--

コラボレヌ 匕数 次のいずれかを任意の順序で指定できたす。

タヌゲット 指定されたタヌゲットをビルドしたす。 もしも タヌゲット ディレクトリである堎合、再垰的にビルドしたす
そのディレクトリ内のすべお。

+パタヌン 制限する 城集兵 䞀臎するものだけず芋なされるファむル パタヌンボタンの隣にある
Perl の正芏衚珟。 耇数の `+' 匕数が受け入れられたす。

名=
セット 名 貎ぶ ノァル トップレベルに枡される「ARG」ハッシュで 構築する ファむルに゜フトりェアを指定する必芁がありたす。

`-cc' キャッシュから取埗するずきに実行されるコマンドを衚瀺したす。 いいえ
ファむルが取埗されたこずが瀺されたす。 これは䟿利です
実際のビルド ログず比范できるビルド ログを生成したす。

`-cd' すべおのキャッシングを無効にしたす。 キャッシュから取埗したり、キャッシュにフラッシュしたりしたせん。

`-cr' 䟝存関係をランダムな順序で構築したす。 これは、耇数構築する堎合に䟿利です。
キャッシュが有効になっおいる同様のツリヌ。

`-cs' 最新であるこずが刀明した既存のビルド タヌゲットをキャッシュず同期したす。
これは、キャッシュが -cc で無効になっおいる堎合、たたは最近有効になったばかりの堎合に圹立ちたす。
UseCache を䜿甚したす。

`-d' 䟝存関係のデバッグを有効にしたす。

`-f'
の代わりに指定されたファむルを䜿甚したす。 構築する (しかし、最初に包含に倉曎
のディレクトリ file).

`-h' 珟圚のビルドにロヌカルなヘルプ メッセヌゞが定矩されおいる堎合は、そのヘルプ メッセヌゞを衚瀺しお終了したす。

`-k' ゚ラヌの埌、可胜な限り続行したす。

「-o」
䞊曞きファむルを読む file.

`-p' 指定されたツリヌの建蚭補品を衚瀺したす。 ビルドは詊行されたせん。

`-pa' コンストラクション プロダクトず関連するアクションを衚瀺したす。 ビルドは詊行されたせん。

`-pw' 補品ずそれらが定矩されおいる堎所を衚瀺したす。 ビルドは詊行されたせん。

`-q' タヌゲットのむンストヌルず削陀に぀いお冗長にならないようにしたす。

`-r' 関連する建蚭補品を削陀したす. ビルドは詊行されたせん。

`-R'
でファむルを怜玢 䌑息。 耇数 -R 䌑息 ディレクトリは
指定された順序。

`-t' ディレクトリ階局を䞊に移動しお、 構築する ファむルが存圚しない堎合
珟圚のディレクトリに。 タヌゲットは、
構築する ファむルに゜フトりェアを指定する必芁がありたす。

`-v' `cons' バヌゞョンを衚瀺し、凊理を続行したす。

`-V' `cons' バヌゞョンを衚瀺しお終了したす。

`-wf'
考慮されたすべおのファむル名を file.

`-x' このようなヘルプメッセヌゞを衚瀺しお終了したす。

構成匕数 で凊理したい任意の匕数にするこずができたす 構築する ファむルに゜フトりェアを指定する必芁がありたす。
あるべきであるこずに泚意しおください -- 匕数をコンスに分離し、匕数を
で凊理したい 構築する ファむルに゜フトりェアを指定する必芁がありたす。

の凊理 構成匕数 次のような暙準パッケヌゞで実行できたす ゲトップト たたはその
バリアント、たたは任意のナヌザヌ定矩パッケヌゞ。 短所 で通過したす 構成匕数 as @ARGV &
の埌に䜕も解釈しようずしたせん。 --.

% cons -R /usr/local/repository -d os=solaris +driver -- -c test -f DEBUG

以䞋を cons に枡したす

-R /usr/local/repository -d os=solaris +ドラむバヌ

そしお、トップレベルたで 構築する ファむルずしお @ARGV

-c テスト -f デバッグ

「cons -r」に泚意しおください。 完党な再垰的な `make clean' ず同等ですが、䜕も必芁ありたせん
でのサポヌト 構築する ファむルたたは任意 城集兵 ファむル。 これは、次の堎合に最も圹立ちたす。
ファむルを゜ヌス ディレクトリにコンパむルしたす ( ビルド & export ディレクトリ、
その埌、ディレクトリを削陀できたす。

オプション `-p'、`-pa'、および `-pw' は、読曞の補助ずしお䜿甚するのに非垞に圹立ちたす。
スクリプトたたはそれらのデバッグ。 むンストヌルするスクリプトを知りたい堎合 ゚クスポヌト/むンクルヌド/foo.h,
たずえば、次のように入力したす。

% cons -pw ゚クスポヌト/むンクルヌド/foo.h

䜿い方 & 曞き蟌み 䟝存関係 スキャナ


QuickScan を䜿甚するず、タヌゲットに䟝存しないシンプルなスキャナヌを゜ヌス ファむル甚にセットアップできたす。 それだけ
XNUMX ぀の QuickScan スキャナヌを任意の゜ヌス ファむルおよび環境に関連付けるこずができたす。

QuickScan は次のように呌び出されたす。

QuickScan CONSENV CODEREF、ファむル名 [、パス]

CODEREF によっお参照されるサブルヌチンは、含たれるファむル名のリストを返すこずが期埅されおいたす
FILE で盎接。 次に、これらのファむル名がスキャンされたす。 オプションの PATH 匕数
ナヌザヌ提䟛の
サブルヌチン。 PATH は、ルックアップ ディレクトリ名の配列ぞの参照、たたは
システムの区切り文字 (UNIX システムでは「:」、システムでは「;」) で区切られた名前の文字列
Windows NT。

サブルヌチンは、ファむルの各行に察しお XNUMX 回呌び出され、$_ が珟圚の行に蚭定されたす。
サブルヌチンが远加の行、さらに蚀えばファむル党䜓を調べる必芁がある堎合は、
次に、ファむルハンドル SCAN からそれら自䜓を読み取るこずができたす。 次の堎合、ルヌプを終了するこずもありたす。
ファむルハンドルを閉じるこずにより、これ以䞊むンクルヌド情報が利甚できないこずがわかりたす。

怜玢パスが指定されおいるかどうかに関係なく、QuickScan は最初にファむルの怜玢を詊みたす。
珟圚のディレクトリからの盞察パス (QuickScan に盎接提䟛される最䞊䜍ファむルの堎合)、
たたは、ファむルを参照したファむルを含むディレクトリから。 これはあたりない
䞀般的ですが、特に自分で曞く䜙裕がある堎合は十分に良さそうです
ナヌティリティであり、暙準的な方法で怜玢パスの䜿甚を制埡できたす。 最埌に、
珟圚、怜玢パスはコロンで区切られおいたす。 これでは、NT 陣営は満足できないかもしれたせん。

これは実際の䟋です。 構築する ここにファむル

サブコン::SMFgen {
my($env, @tables) = @_;
foreach $t (@tables) {
$env->QuickScan(sub { /\b\S*?\.smf\b/g }, "$t.smf",
$env->{SMF_INCLUDE_PATH});
$env->コマンド(
["$t.smdb.cc","$t.smdb.h","$t.snmp.cc","$t.ami.cc", "$t.http.cc"],
"$t.smf",
q(
smfgen %( %SMF_INCLUDE_OPT %) %
)
);
}
}

[`$env->QuickScan ...' および `$env->Command ...' の圢匏は䜿甚しないでください。
必芁ですが、䜕らかの理由で、この特定の呌び出しに必芁です。 これが珟れたす
Perl のバグか、私の誀解です。 この呌び出しスタむルは
垞に必芁ず思われる。]

これにより、フォヌムのすべおの名前が怜玢されたすファむル内の .smf。 堎合でも名前を返したす
それらはコメント内にありたすが、問題ありたせん (メカニズムは䜙分なファむルを蚱容したす。
それらは、ファむルが芋぀からないずきに気付かれるずいう前提で単に無芖されたす。
プログラム (この䟋では smfgen) が実際に呌び出されたす)。

スキャナヌは、特定の゜ヌス ファむルに察しおのみ呌び出されたす。
朚。 これは、特定の゜ヌス ファむルに察しお XNUMX 回だけ呌び出されたす。

同じスキャナヌを構築する別の方法を次に瀺したす。 これは明瀺的なコヌド参照を䜿甚しおおり、
たた、この堎合は䞍必芁にファむル党䜓を読み取りたす。

サブマむスキャン{
私の@含む;
する
プッシュ (@includes, /\b\S*?\.smf\b/g);
} その間;
@含む
}

ルヌプの順序が逆になり、ルヌプ テストが最埌になるこずに泚意しおください。 これは
最初の行はすでに読み取られおいるためです。 このスキャナは゜ヌスに接続できたす
ファむル:

QuickScan $env \myscan, "$_.smf";

サポヌト そしお 提案


短所は、ナヌザヌ コミュニティによっお維持されたす。 賌読するには、にメヌルを送信しおください 短所-議論-
[メヌル保護] 䜓で 申し蟌む.

から提案を報告しおください [メヌル保護] メヌリングリスト。

onworks.net サヌビスを䜿甚しおオンラむンでコンスを䜿甚する


無料のサヌバヌずワヌクステヌション

Windows ず Linux のアプリをダりンロヌド

Linuxコマンド

Ad