9.2 論理式、真偽関数、コマンドのコントロール
-------------------------------------------------
-omakeã\81®ã\83\96ã\83¼ã\83ªã\82¢ã\83³å\9e\8bã\81¯ç\8a¶æ³\81ã\81«ç\84¡å\8f\8då¿\9cã\81ª(case-insensitive)æ\96\87å\97å\88\97ã\81«ã\82\88ã\81£ã\81¦è¡¨ç\8f¾ã\81\95ã\82\8cã\81¾ã\81\99ã\80\82ã\80\8cå\81½ã\80\8dã\81¯æ\96\87å\97å\88\97 ``false`` , ``no`` , ``nil`` , ``undefined`` , ``0`` ã\81®ã\81\84ã\81¥ã\82\8cã\81\8bã\81«ã\82\88ã\81£ã\81¦è¡¨ç\8f¾ã\81\95ã\82\8cã\81¾ã\81\99ã\80\82ã\81\9dã\82\8c以å¤\96ã\81¯ã\81\99ã\81¹ã\81¦ã\80\8cç\9c\9fã\80\8dとなります。
+omakeã\81®ã\83\96ã\83¼ã\83ªã\82¢ã\83³å\9e\8bã\81¯ç\8a¶æ³\81ã\81«ç\84¡å\8f\8då¿\9cã\81ª(case-insensitive)æ\96\87å\97å\88\97ã\81«ã\82\88ã\81£ã\81¦è¡¨ç\8f¾ã\81\95ã\82\8cã\81¾ã\81\99ã\80\82ã\80\8eå\81½ã\80\8fã\81¯æ\96\87å\97å\88\97 ``false`` , ``no`` , ``nil`` , ``undefined`` , ``0`` ã\81®ã\81\84ã\81¥ã\82\8cã\81\8bã\81«ã\82\88ã\81£ã\81¦è¡¨ç\8f¾ã\81\95ã\82\8cã\81¾ã\81\99ã\80\82ã\81\9dã\82\8c以å¤\96ã\81¯ã\81\99ã\81¹ã\81¦ã\80\8eç\9c\9fã\80\8fとなります。
.. index::
single: not()
* OMakeは ``Makefile`` と同じくらい多くのファイルを作ります。文法は似ており、makeと同様に多くのビルドイン関数が用意されています。しかしながら、この2つのビルドシステムは同じではありません。OMakeではいくつかの酷い機能(これは著者の意見です)が外されており、それに代わって新しい機能が追加されています。
* OMakeはWin32を含んだ、複数のプラットフォーム上で同様に動きます。あなたは複数のプラットフォーム上で動かすためにコードを変更したり、いくつかのトリッキーなテクを使ったり、 ``$(OSTYPE)`` 変数を使ってビルド設定を調節する必要はありません。
-* OMakeã\81®ä¾\9då\98é\96¢ä¿\82ã\81®è§£æ\9e\90ã\81¯MD5ã\81«ã\82\88ã\82\8bã\83\95ã\82¡ã\82¤ã\83«ã\81®è¦\81ç´\84ã\82\92å\85\83ã\81«ã\81\97ã\81¦ã\81\84ã\81¾ã\81\99ã\80\82ã\81\93ã\82\8cã\81¯ã\81¤ã\81¾ã\82\8aã\80\81ä¾\9då\98é\96¢ä¿\82ã\81®è§£æ\9e\90ã\81¯ã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\80\8cä¿®æ£æ\97¥æ\99\82ã\80\8dã\81§ã\81¯ã\81ªã\81\8fã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\80\8cå\86\85容ã\80\8dを元にしていることを表しています。さあ、ローカル日時とファイルサーバの日時から生じるミスマッチや、間違ったタイムスタンプの変更によるビルドミスにおさらばしましょう。
+* OMakeã\81®ä¾\9då\98é\96¢ä¿\82ã\81®è§£æ\9e\90ã\81¯MD5ã\81«ã\82\88ã\82\8bã\83\95ã\82¡ã\82¤ã\83«ã\81®è¦\81ç´\84ã\82\92å\85\83ã\81«ã\81\97ã\81¦ã\81\84ã\81¾ã\81\99ã\80\82ã\81\93ã\82\8cã\81¯ã\81¤ã\81¾ã\82\8aã\80\81ä¾\9då\98é\96¢ä¿\82ã\81®è§£æ\9e\90ã\81¯ã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\80\8eä¿®æ£æ\97¥æ\99\82ã\80\8fã\81§ã\81¯ã\81ªã\81\8fã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\80\8eå\86\85容ã\80\8fを元にしていることを表しています。さあ、ローカル日時とファイルサーバの日時から生じるミスマッチや、間違ったタイムスタンプの変更によるビルドミスにおさらばしましょう。
.. index::
single: OMakeroot
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. Let's start with part 2, defining a generic compilation rule. We'll define the build rule as an implicit rule. To handle the include path, we'll define a variable CAT_INCLUDES that specifies the include path. This will be an array of directories. To define the options, we'll use a lazy variable (Section 7.5). In case there are any other standard flags, we'll define a CAT_FLAGS variable.
-ã\81\95ã\81¦ã\80\81ã\83\91ã\83¼ã\83\882ã\81«ç§»ã\81£ã\81¦ã\80\81é\80\9a常ã\81®ç·¨é\9b\86ã\83«ã\83¼ã\83«ã\82\92å®\9a義ã\81\97ã\81¦ã\81\84ã\81\8dã\81¾ã\81\97ã\82\87ã\81\86ã\80\82ä»\8aå\9b\9eç§\81ã\81\9fã\81¡ã\81¯ã\83\93ã\83«ã\83\89ã\83«ã\83¼ã\83«ã\81«ã\81¤ã\81\84ã\81¦ã\80\81ã\82½ã\83¼ã\82¹ã\82³ã\83¼ã\83\89ã\81«ç\9b´æ\8e¥ã\83«ã\83¼ã\83«ã\82\92å®\9a義ã\81\99ã\82\8bã\81\93ã\81¨ã\81«ã\81\97ã\81¾ã\81\99ã\80\82ã\81¾ã\81\9aã\81¯ã\82¤ã\83³ã\82¯ã\83«ã\83¼ã\83\89ã\83\91ã\82¹ã\82\92æ\89±ã\81\86ã\81\9fã\82\81ã\81«ã\80\81ã\82¤ã\83³ã\82¯ã\83«ã\83¼ã\83\89ã\83\91ã\82¹ã\82\92æ\8c\87å®\9aã\81\97ã\81\9få¤\89æ\95° ``CAT_INCLUDES`` ã\82\92å®\9a義ã\81\97ã\81¾ã\81\99ã\80\82ã\81\93ã\82\8cã\81¯ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81\8cæ ¼ç´\8dã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bé\85\8då\88\97ã\81§ã\81\99ã\80\82ã\81\9dã\81\97ã\81¦ã\82ªã\83\97ã\82·ã\83§ã\83³ã\82\92å®\9a義ã\81\99ã\82\8bã\81\9fã\82\81ã\81«ã\80\81ç§\81ã\81\9fã\81¡ã\81¯ã\80\8cé\81\85延è©\95価å¤\89æ\95°(lazy variable)(":ref:`label7.5`"ã\82\92å\8f\82ç\85§)ã\80\8dを使用します。この場合は他にも標準的なフラグが存在していますので、 ``CAT_FLAGS`` 変数も定義することにしましょう。 ::
+ã\81\95ã\81¦ã\80\81ã\83\91ã\83¼ã\83\882ã\81«ç§»ã\81£ã\81¦ã\80\81é\80\9a常ã\81®ç·¨é\9b\86ã\83«ã\83¼ã\83«ã\82\92å®\9a義ã\81\97ã\81¦ã\81\84ã\81\8dã\81¾ã\81\97ã\82\87ã\81\86ã\80\82ä»\8aå\9b\9eç§\81ã\81\9fã\81¡ã\81¯ã\83\93ã\83«ã\83\89ã\83«ã\83¼ã\83«ã\81«ã\81¤ã\81\84ã\81¦ã\80\81ã\82½ã\83¼ã\82¹ã\82³ã\83¼ã\83\89ã\81«ç\9b´æ\8e¥ã\83«ã\83¼ã\83«ã\82\92å®\9a義ã\81\99ã\82\8bã\81\93ã\81¨ã\81«ã\81\97ã\81¾ã\81\99ã\80\82ã\81¾ã\81\9aã\81¯ã\82¤ã\83³ã\82¯ã\83«ã\83¼ã\83\89ã\83\91ã\82¹ã\82\92æ\89±ã\81\86ã\81\9fã\82\81ã\81«ã\80\81ã\82¤ã\83³ã\82¯ã\83«ã\83¼ã\83\89ã\83\91ã\82¹ã\82\92æ\8c\87å®\9aã\81\97ã\81\9få¤\89æ\95° ``CAT_INCLUDES`` ã\82\92å®\9a義ã\81\97ã\81¾ã\81\99ã\80\82ã\81\93ã\82\8cã\81¯ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81\8cæ ¼ç´\8dã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bé\85\8då\88\97ã\81§ã\81\99ã\80\82ã\81\9dã\81\97ã\81¦ã\82ªã\83\97ã\82·ã\83§ã\83³ã\82\92å®\9a義ã\81\99ã\82\8bã\81\9fã\82\81ã\81«ã\80\81ç§\81ã\81\9fã\81¡ã\81¯ã\80\8eé\81\85延è©\95価å¤\89æ\95°(lazy variable)(":ref:`label7.5`"ã\82\92å\8f\82ç\85§)ã\80\8fを使用します。この場合は他にも標準的なフラグが存在していますので、 ``CAT_FLAGS`` 変数も定義することにしましょう。 ::
# 私たちは今回CATC変数ををオーバーライドしたいので、catcコマンドを定義します
CATC = catc
.. For an analogy that might make this clearer, consider the C programming language, where a .o file is produced by compiling a .c file. If a file foo.c contains a line like #include "fum.h", then foo.c should be recompiled whenever fum.h changes. That is, the file foo.o depends on the file fum.h. In the OMake parlance, this is called an implicit dependency, and the .SCANNER <commands> would print a line like the following.
-ã\81\93ã\81®é¡\9eæ\8e¨ã\81¯ã\80\81 ``.o`` ã\83\95ã\82¡ã\82¤ã\83«ã\81\8c ``.c`` ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ã\82³ã\83³ã\83\91ã\82¤ã\83«ã\81\99ã\82\8bã\81\93ã\81¨ã\81§ç\94\9fæ\88\90ã\81\95ã\82\8cã\82\8bCè¨\80èª\9eã\81«ã\81¤ã\81\84ã\81¦è\80\83ã\81\88ã\82\8bã\81¨ã\82\88ã\82\8aæ\98\8eç\9eã\81«ã\81ªã\82\8aã\81¾ã\81\99ã\80\82ã\82\82ã\81\97ã\83\95ã\82¡ã\82¤ã\83« ``foo.c`` ã\81\8c ``#include "fum.h"`` ã\81®ã\82\88ã\81\86ã\81ªè¡\8cã\82\92å\90«ã\82\93ã\81§ã\81\84ã\81\9fã\81¨ã\81\99ã\82\8bã\81¨ã\80\81 ``foo.c`` ã\81¯ ``fum.c`` ã\81\8cå¤\89æ\9b´ã\81\95ã\82\8cã\81\9fã\81¨ã\81\8dã\81¯ã\81\84ã\81¤ã\81§ã\82\82å\86\8dã\82³ã\83³ã\83\91ã\82¤ã\83«ã\82\92è¡\8cã\81\86å¿\85è¦\81ã\81\8cã\81\82ã\82\8aã\81¾ã\81\99ã\80\82ã\81\93ã\82\8cã\81¯ã\81¤ã\81¾ã\82\8aã\80\81ã\83\95ã\82¡ã\82¤ã\83« ``foo.o`` ã\81\8cã\83\95ã\82¡ã\82¤ã\83« ``fum.h`` ã\81«ä¾\9då\98ã\81\97ã\81¦ã\81\84ã\82\8bã\81\93ã\81¨ã\82\92表ã\81\97ã\81¦ã\81\84ã\81¾ã\81\99ã\80\82OMakeã\81®ç\94¨èª\9eã\81§ã\81¯ã\80\81ã\81\93ã\81®ã\81\93ã\81¨ã\82\92ã\80\8cæ\9a\97é»\99ç\9a\84ã\81ªä¾\9då\98é\96¢ä¿\82(implicit dependency)ã\80\8dと呼んでおり、 ``.SCANNER <commands>`` は以下のような行を出力する必要があるでしょう。 ::
+ã\81\93ã\81®é¡\9eæ\8e¨ã\81¯ã\80\81 ``.o`` ã\83\95ã\82¡ã\82¤ã\83«ã\81\8c ``.c`` ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ã\82³ã\83³ã\83\91ã\82¤ã\83«ã\81\99ã\82\8bã\81\93ã\81¨ã\81§ç\94\9fæ\88\90ã\81\95ã\82\8cã\82\8bCè¨\80èª\9eã\81«ã\81¤ã\81\84ã\81¦è\80\83ã\81\88ã\82\8bã\81¨ã\82\88ã\82\8aæ\98\8eç\9eã\81«ã\81ªã\82\8aã\81¾ã\81\99ã\80\82ã\82\82ã\81\97ã\83\95ã\82¡ã\82¤ã\83« ``foo.c`` ã\81\8c ``#include "fum.h"`` ã\81®ã\82\88ã\81\86ã\81ªè¡\8cã\82\92å\90«ã\82\93ã\81§ã\81\84ã\81\9fã\81¨ã\81\99ã\82\8bã\81¨ã\80\81 ``foo.c`` ã\81¯ ``fum.c`` ã\81\8cå¤\89æ\9b´ã\81\95ã\82\8cã\81\9fã\81¨ã\81\8dã\81¯ã\81\84ã\81¤ã\81§ã\82\82å\86\8dã\82³ã\83³ã\83\91ã\82¤ã\83«ã\82\92è¡\8cã\81\86å¿\85è¦\81ã\81\8cã\81\82ã\82\8aã\81¾ã\81\99ã\80\82ã\81\93ã\82\8cã\81¯ã\81¤ã\81¾ã\82\8aã\80\81ã\83\95ã\82¡ã\82¤ã\83« ``foo.o`` ã\81\8cã\83\95ã\82¡ã\82¤ã\83« ``fum.h`` ã\81«ä¾\9då\98ã\81\97ã\81¦ã\81\84ã\82\8bã\81\93ã\81¨ã\82\92表ã\81\97ã\81¦ã\81\84ã\81¾ã\81\99ã\80\82OMakeã\81®ç\94¨èª\9eã\81§ã\81¯ã\80\81ã\81\93ã\81®ã\81\93ã\81¨ã\82\92ã\80\8eæ\9a\97é»\99ç\9a\84ã\81ªä¾\9då\98é\96¢ä¿\82(implicit dependency)ã\80\8fと呼んでおり、 ``.SCANNER <commands>`` は以下のような行を出力する必要があるでしょう。 ::
foo.o: fum.h
.. Alternately, the directory structure may be hierarchical. Instead of using glob, we could use the subdirs function, returns each of the directories in a hierarchy. For example, this is the result of evaluating the subdirs function in the omake project root. The P option, passed as the first argument, specifies that the listing is “proper,” it should not include the omake directory itself.
-ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªæ§\8bé\80 ã\81\8cé\9a\8e層ç\9a\84ã\81§ã\81\82ã\82\8bå ´å\90\88ã\82\92è\80\83ã\81\88ã\81¦ã\81¿ã\81¾ã\81\97ã\82\87ã\81\86ã\80\82ã\81\9dã\81®å ´å\90\88 ``glob`` é\96¢æ\95°ã\82\92ç\94¨ã\81\84ã\82\8b代ã\82\8fã\82\8aã\81«ã\80\81é\9a\8e層ç\9a\84ã\81«å\90\84ã\80\85ã\81®ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\82\92è¿\94ã\81\99 ``subdirs`` é\96¢æ\95°ã\82\92使ã\81\84ã\81¾ã\81\99ã\80\82ä¾\8bã\81\88ã\81°ã\80\81以ä¸\8bã\81¯OMakeã\83\97ã\83ã\82¸ã\82§ã\82¯ã\83\88ã\81®ã\83«ã\83¼ã\83\88ä¸\8aã\81§ ``subdirs`` é\96¢æ\95°ã\82\92è©\95価ã\81\97ã\81\9fçµ\90æ\9e\9cã\81§ã\81\99ã\80\82æ\9c\80å\88\9dã\81®å¼\95æ\95°ã\81¨ã\81\97ã\81¦æ¸¡ã\81\97ã\81\9fPã\82ªã\83\97ã\82·ã\83§ã\83³ã\81§ã\81¯ã\80\81OMakeã\81®ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªè\87ªèº«ã\82\92å\90«ã\82\93ã\81§ã\81\84ã\81ªã\81\84ã\80\81ã\80\8cé\81©å\88\87ã\81ªã\80\8dリストを返すことを指定しています。 ::
+ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªæ§\8bé\80 ã\81\8cé\9a\8e層ç\9a\84ã\81§ã\81\82ã\82\8bå ´å\90\88ã\82\92è\80\83ã\81\88ã\81¦ã\81¿ã\81¾ã\81\97ã\82\87ã\81\86ã\80\82ã\81\9dã\81®å ´å\90\88 ``glob`` é\96¢æ\95°ã\82\92ç\94¨ã\81\84ã\82\8b代ã\82\8fã\82\8aã\81«ã\80\81é\9a\8e層ç\9a\84ã\81«å\90\84ã\80\85ã\81®ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\82\92è¿\94ã\81\99 ``subdirs`` é\96¢æ\95°ã\82\92使ã\81\84ã\81¾ã\81\99ã\80\82ä¾\8bã\81\88ã\81°ã\80\81以ä¸\8bã\81¯OMakeã\83\97ã\83ã\82¸ã\82§ã\82¯ã\83\88ã\81®ã\83«ã\83¼ã\83\88ä¸\8aã\81§ ``subdirs`` é\96¢æ\95°ã\82\92è©\95価ã\81\97ã\81\9fçµ\90æ\9e\9cã\81§ã\81\99ã\80\82æ\9c\80å\88\9dã\81®å¼\95æ\95°ã\81¨ã\81\97ã\81¦æ¸¡ã\81\97ã\81\9fPã\82ªã\83\97ã\82·ã\83§ã\83³ã\81§ã\81¯ã\80\81OMakeã\81®ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªè\87ªèº«ã\82\92å\90«ã\82\93ã\81§ã\81\84ã\81ªã\81\84ã\80\81ã\80\8eé\81©å\88\87ã\81ªã\80\8fリストを返すことを指定しています。 ::
osh> subdirs(P, .)
- : <array
**CDLL_IMPLIES_STATIC**
-もし **CDLL_IMPLIES_STATIC`` 変数が真である( ``Win32`` 上でこれはデフォルトの値です)ならば、すべての ``DynamicC`` 関数は共有ライブラリを自動的に生成し、さらに静的ライブラリを生成することを保障してくれます。
+もし ``CDLL_IMPLIES_STATIC`` 変数が真である( ``Win32`` 上でこれはデフォルトの値です)ならば、すべての ``DynamicC`` 関数は共有ライブラリを自動的に生成し、さらに静的ライブラリを生成することを保障してくれます。
.. index::
single: StaticCLibraryCopy()
IOを除いて、omakeのプログラムは全体が関数的です。これは二つの意味を持っています。
* 代入という操作が存在しません。
-* é\96¢æ\95°ã\81¯å¼\95æ\95°ã\82\92渡ã\81\97ã\81¦ã\80\81å\88¥ã\81®å\80¤ã\82\92è¿\94ã\81\99ã\80\8cå\80¤(value)ã\80\8dです。
+* é\96¢æ\95°ã\81¯å¼\95æ\95°ã\82\92渡ã\81\97ã\81¦ã\80\81å\88¥ã\81®å\80¤ã\82\92è¿\94ã\81\99ã\80\8eå\80¤(value)ã\80\8fです。
二番目についてはそのままの説明です。例えば、以下のプログラムでは関数の値を返すことによって加算する関数を定義しています。 ::
osh> println($X $(getenv BOO))
1 12
-``export`` ã\82³ã\83\9eã\83³ã\83\89ã\81¯ã\81\93ã\81®å\88¶é\99\90ã\82\92å¤\96ã\81«å\87ºã\81\97ã\81¾ã\81\99ã\80\82ã\81\93ã\81®ã\82³ã\83\9eã\83³ã\83\89ã\81¯å\86\85é\83¨ã\81®ã\82¹ã\82³ã\83¼ã\83\97ã\81®å\80¤(ã\81\82ã\82\8bã\81\84ã\81¯å\85¨ä½\93ã\81®å¤\89æ\95°ç\92°å¢\83)ã\82\92å¤\96é\83¨ã\81«ã\80\8cã\82¨ã\82¯ã\82¹ã\83\9dã\83¼ã\83\88ã\80\8dするお世話をします。 ::
+``export`` ã\82³ã\83\9eã\83³ã\83\89ã\81¯ã\81\93ã\81®å\88¶é\99\90ã\82\92å¤\96ã\81«å\87ºã\81\97ã\81¾ã\81\99ã\80\82ã\81\93ã\81®ã\82³ã\83\9eã\83³ã\83\89ã\81¯å\86\85é\83¨ã\81®ã\82¹ã\82³ã\83¼ã\83\97ã\81®å\80¤(ã\81\82ã\82\8bã\81\84ã\81¯å\85¨ä½\93ã\81®å¤\89æ\95°ç\92°å¢\83)ã\82\92å¤\96é\83¨ã\81«ã\80\8eã\82¨ã\82¯ã\82¹ã\83\9dã\83¼ã\83\88ã\80\8fするお世話をします。 ::
osh> X = 1
osh> setenv(BOO, 12)
4. OMake言語の概要と文法
==================================
-ã\83\97ã\83ã\82¸ã\82§ã\82¯ã\83\88ã\81¯ ``OMakefile`` ã\82\92ç\94¨ã\81\84ã\81¦omakeã\81«ã\81©ã\81®ã\82\88ã\81\86ã\81«ã\83\93ã\83«ã\83\89ã\81\99ã\82\8bã\81®ã\81\8bæ\8c\87å®\9aã\81\97ã\81¦ã\81\8aã\82\8aã\80\81æ\96\87æ³\95ã\81¯ ``Makefile`` ã\81¨ä¼¼ã\81¦ã\81\84ã\81¾ã\81\99ã\80\82 ``OMakefile`` ã\81¯3ã\81¤ã\81®æ\96\87æ³\95è¦\8få\89\87ã\80\8cå¤\89æ\95°ã\81®å®\9a義ã\80\8dã\80\8cé\96¢æ\95°ã\81®å®\9a義ã\80\8dã\80\8cã\83«ã\83¼ã\83«ã\81®å®\9a義ã\80\8dを持ち合わせています。
+ã\83\97ã\83ã\82¸ã\82§ã\82¯ã\83\88ã\81¯ ``OMakefile`` ã\82\92ç\94¨ã\81\84ã\81¦omakeã\81«ã\81©ã\81®ã\82\88ã\81\86ã\81«ã\83\93ã\83«ã\83\89ã\81\99ã\82\8bã\81®ã\81\8bæ\8c\87å®\9aã\81\97ã\81¦ã\81\8aã\82\8aã\80\81æ\96\87æ³\95ã\81¯ ``Makefile`` ã\81¨ä¼¼ã\81¦ã\81\84ã\81¾ã\81\99ã\80\82 ``OMakefile`` ã\81¯3ã\81¤ã\81®æ\96\87æ³\95è¦\8få\89\87ã\80\8eå¤\89æ\95°ã\81®å®\9a義ã\80\8fã\80\8eé\96¢æ\95°ã\81®å®\9a義ã\80\8fã\80\8eã\83«ã\83¼ã\83«ã\81®å®\9a義ã\80\8fを持ち合わせています。
.. index:
single: 変数
``case`` の数は任意です。 ``default`` 宣言句はなくても構いませんが、使う場合は一番最後の宣言句で用いるべきです。
-``switch`` ã\81®å ´å\90\88ã\80\81æ\96\87å\97å\88\97ã\81¯ ``<patterni>`` ã\81¨ã\80\8cæ\96\87å\97é\80\9aã\82\8aã\81«ã\80\8d比較されます。 ::
+``switch`` ã\81®å ´å\90\88ã\80\81æ\96\87å\97å\88\97ã\81¯ ``<patterni>`` ã\81¨ã\80\8eæ\96\87å\97é\80\9aã\82\8aã\81«ã\80\8f比較されます。 ::
switch $(HOST)
case mymachine
4.14.1.2 :key:
""""""""""""""""""
-``.STATIC`` ã\81¨ ``.MEMO`` ã\83«ã\83¼ã\83«ã\81¯ã\81¾ã\81\9fã\80\81è¨\88ç®\97ã\81\95ã\82\8cã\81\9få\80¤ã\81¨ã\83ªã\83³ã\82¯ã\81\97ã\81¦ã\81\84ã\82\8bã\80\8cã\82ã\83¼ã\80\8dã\82\92表ã\81\99 ``:key:`` ã\82\92使ã\81\86ã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81¾ã\81\99ã\80\82 ``.STATIC`` ã\83«ã\83¼ã\83«ã\82\92ã\80\81ã\82ã\83¼ã\81¨å\80¤ã\81\8cã\83ªã\83³ã\82¯ã\81\97ã\81\9fè¾\9eæ\9b¸ã\81¨ã\81\97ã\81¦è\80\83ã\81\88ã\82\8bã\81\93ã\81¨ã\81¯æ\9c\89ç\94¨ã\81§ã\81\99ã\80\82 ``.STATIC`` ã\83«ã\83¼ã\83«ã\81\8cè©\95価ã\81\95ã\82\8cã\81\9få ´å\90\88ã\80\81çµ\90æ\9e\9cã\81¯æ\8c\87å®\9aã\81\95ã\82\8cã\81\9fã\83«ã\83¼ã\83«ã\81«ã\82\88ã\81£ã\81¦å®\9a義ã\81\95ã\82\8cã\81\9f ``:key:`` ã\81\8cã\83\86ã\83¼ã\83\96ã\83«å\86\85ã\81«ä¿\9då\98ã\81\95ã\82\8cã\81¾ã\81\99(ã\82\82ã\81\97 ``:key:`` ã\81\8cæ\8c\87å®\9aã\81\95ã\82\8cã\81¦ã\81\84ã\81ªã\81\84å ´å\90\88ã\80\81ã\83\87ã\83\95ã\82©ã\83«ã\83\88ã\81®ã\82ã\83¼ã\81\8c代ã\82\8fã\82\8aã\81«ç\94¨ã\81\84ã\82\89ã\82\8cã\81¾ã\81\99)ã\80\82è¨\80ã\81\84æ\8f\9bã\81\88ã\82\8bã\81¨ã\80\81ã\83«ã\83¼ã\83«ã\81¯é\96¢æ\95°ã\81®ã\82\88ã\81\86ã\81ªã\82\82ã\81®ã\81§ã\81\99ã\80\82 ``:key:`` ã\81¯é\96¢æ\95°ã\81®ã\80\8cå¼\95æ\95°ã\80\8dを表しており、ルール部分で結果を計算します。
+``.STATIC`` ã\81¨ ``.MEMO`` ã\83«ã\83¼ã\83«ã\81¯ã\81¾ã\81\9fã\80\81è¨\88ç®\97ã\81\95ã\82\8cã\81\9få\80¤ã\81¨ã\83ªã\83³ã\82¯ã\81\97ã\81¦ã\81\84ã\82\8bã\80\8eã\82ã\83¼ã\80\8fã\82\92表ã\81\99 ``:key:`` ã\82\92使ã\81\86ã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81¾ã\81\99ã\80\82 ``.STATIC`` ã\83«ã\83¼ã\83«ã\82\92ã\80\81ã\82ã\83¼ã\81¨å\80¤ã\81\8cã\83ªã\83³ã\82¯ã\81\97ã\81\9fè¾\9eæ\9b¸ã\81¨ã\81\97ã\81¦è\80\83ã\81\88ã\82\8bã\81\93ã\81¨ã\81¯æ\9c\89ç\94¨ã\81§ã\81\99ã\80\82 ``.STATIC`` ã\83«ã\83¼ã\83«ã\81\8cè©\95価ã\81\95ã\82\8cã\81\9få ´å\90\88ã\80\81çµ\90æ\9e\9cã\81¯æ\8c\87å®\9aã\81\95ã\82\8cã\81\9fã\83«ã\83¼ã\83«ã\81«ã\82\88ã\81£ã\81¦å®\9a義ã\81\95ã\82\8cã\81\9f ``:key:`` ã\81\8cã\83\86ã\83¼ã\83\96ã\83«å\86\85ã\81«ä¿\9då\98ã\81\95ã\82\8cã\81¾ã\81\99(ã\82\82ã\81\97 ``:key:`` ã\81\8cæ\8c\87å®\9aã\81\95ã\82\8cã\81¦ã\81\84ã\81ªã\81\84å ´å\90\88ã\80\81ã\83\87ã\83\95ã\82©ã\83«ã\83\88ã\81®ã\82ã\83¼ã\81\8c代ã\82\8fã\82\8aã\81«ç\94¨ã\81\84ã\82\89ã\82\8cã\81¾ã\81\99)ã\80\82è¨\80ã\81\84æ\8f\9bã\81\88ã\82\8bã\81¨ã\80\81ã\83«ã\83¼ã\83«ã\81¯é\96¢æ\95°ã\81®ã\82\88ã\81\86ã\81ªã\82\82ã\81®ã\81§ã\81\99ã\80\82 ``:key:`` ã\81¯é\96¢æ\95°ã\81®ã\80\8eå¼\95æ\95°ã\80\8fを表しており、ルール部分で結果を計算します。
これを確かめるために、 ``.MEMO`` ルールをフィボナッチ関数に改良してみましょう。 ::
osh>S = $'''This is a string'''
- : <data "This is a string"> : String
- * 詳細ã\81¯ã\80\8c :ref:`label7.2` ã\80\8dを参照してください。
+ * 詳細ã\81¯ã\80\8e :ref:`label7.2` ã\80\8fを参照してください。
* file - ファイル
-----------------------------------
.. OMake version 0.9.6 introduced preliminary support for multiple, simultaneous versions of a project. Versioning uses the vmount(dir1, dir2) function, which defines a “virtual mount” of directory dir1 over directory dir2. A “virtual mount” is like a transparent mount in Unix, where the files from dir1 appear in the dir2 namespace, but new files are created in dir2. More precisely, the filename dir2/foo refers to: a) the file dir1/foo if it exists, or b) dir2/foo otherwise.
-OMake ã\83\90ã\83¼ã\82¸ã\83§ã\83³ 0.9.6ã\81§ã\81¯ã\80\81è¤\87æ\95°ã\81®å\90\8cã\81\98ã\83\90ã\83¼ã\82¸ã\83§ã\83³ã\81®ã\83\97ã\83ã\82¸ã\82§ã\82¯ã\83\88ã\82\84ã\80\81äº\88å\82\99ã\81¨ã\81\97ã\81¦ç\94¨ã\81\84ã\82\8bè¤\87æ\95°ã\81®ã\83\97ã\83ã\82¸ã\82§ã\82¯ã\83\88ã\81«é\96¢ã\81\99ã\82\8bã\82µã\83\9dã\83¼ã\83\88ã\82\92å°\8eå\85¥ã\81\97ã\81¾ã\81\97ã\81\9fã\80\82 ``vmount(dir1, dir2)`` é\96¢æ\95°ã\82\92ç\94¨ã\81\84ã\82\8bã\81\93ã\81¨ã\81§ã\80\81 ``dir1/`` ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\82\92 ``dir2/`` ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81«ã\80\8cä»®æ\83³ç\9a\84ã\81«ã\83\9eã\82¦ã\83³ã\83\88ã\80\8dã\81\99ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81¾ã\81\99ã\80\82ã\80\8cä»®æ\83³ç\9a\84ã\81ªã\83\9eã\82¦ã\83³ã\83\88ã\80\8dはUnixにて、 ``dir1/`` ディレクトリ内のファイルを ``dir2/`` ディレクトリにマウントするが、新しいファイルは ``dir2/`` ディレクトリに作られるようなものです。さらに具体的には、ファイル ``dir2/foo`` は、もし ``dir1/foo`` が存在している場合 ``dir1/foo`` に置き換わりますが、存在していない場合は ``dir2/foo`` が用いられます。
+OMake ã\83\90ã\83¼ã\82¸ã\83§ã\83³ 0.9.6ã\81§ã\81¯ã\80\81è¤\87æ\95°ã\81®å\90\8cã\81\98ã\83\90ã\83¼ã\82¸ã\83§ã\83³ã\81®ã\83\97ã\83ã\82¸ã\82§ã\82¯ã\83\88ã\82\84ã\80\81äº\88å\82\99ã\81¨ã\81\97ã\81¦ç\94¨ã\81\84ã\82\8bè¤\87æ\95°ã\81®ã\83\97ã\83ã\82¸ã\82§ã\82¯ã\83\88ã\81«é\96¢ã\81\99ã\82\8bã\82µã\83\9dã\83¼ã\83\88ã\82\92å°\8eå\85¥ã\81\97ã\81¾ã\81\97ã\81\9fã\80\82 ``vmount(dir1, dir2)`` é\96¢æ\95°ã\82\92ç\94¨ã\81\84ã\82\8bã\81\93ã\81¨ã\81§ã\80\81 ``dir1/`` ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\82\92 ``dir2/`` ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81«ã\80\8eä»®æ\83³ç\9a\84ã\81«ã\83\9eã\82¦ã\83³ã\83\88ã\80\8fã\81\99ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81¾ã\81\99ã\80\82ã\80\8eä»®æ\83³ç\9a\84ã\81ªã\83\9eã\82¦ã\83³ã\83\88ã\80\8fはUnixにて、 ``dir1/`` ディレクトリ内のファイルを ``dir2/`` ディレクトリにマウントするが、新しいファイルは ``dir2/`` ディレクトリに作られるようなものです。さらに具体的には、ファイル ``dir2/foo`` は、もし ``dir1/foo`` が存在している場合 ``dir1/foo`` に置き換わりますが、存在していない場合は ``dir2/foo`` が用いられます。
.. The vmount function makes it easy to specify multiple versions of a project. Suppose we have a project where the source files are in the directory src/, and we want to compile two versions, one with debugging support and one optimized. We create two directories, debug and opt, and mount the src directory over them.
----------------------------------
ルールの内容に書かれているコマンドはシェルによって頻繁に評価されます。omakeはまた、omake自身も評価の対象に加えることもできます。
-ã\81\93ã\82\8cã\82\89ã\81®ã\80\8cã\83\95ã\82¡ã\82¤ã\83«ã\82\92ä½\9cã\82\8bã\81\9fã\82\81ã\81®ã\83«ã\83¼ã\83«ã\80\8dを表現するためには ``section`` 表現を使います。以下のルールではターゲットの ``hello.c`` を生成するためにomakeのIO関数を用いています。 ::
+ã\81\93ã\82\8cã\82\89ã\81®ã\80\8eã\83\95ã\82¡ã\82¤ã\83«ã\82\92ä½\9cã\82\8bã\81\9fã\82\81ã\81®ã\83«ã\83¼ã\83«ã\80\8fを表現するためには ``section`` 表現を使います。以下のルールではターゲットの ``hello.c`` を生成するためにomakeのIO関数を用いています。 ::
hello.c:
section
これはある程度ですがうまく動きます。この機能の利点の一つとしては、 ``foo.c`` が変更された場合、いつでもスキャナが再解析を行ってくれるというのが挙げられます。しかしながらこれには問題があります。Cの依存関係は *再帰的* なのです。すなわち、もしファイル ``foo.h`` が修正されたとしたら、そのファイルは他のファイルを含んでいることで、さらなる依存関係が生じているのかもしれません。必要なのは ``foo.h`` の変更に応じて、再びスキャナを走らせることです。
-ç§\81ã\81\9fã\81¡ã\81¯ã\81\93ã\81®å\95\8fé¡\8cã\82\92ã\80\8cä¾\9då\98é\96¢ä¿\82ã\82\92示ã\81\99å\80¤(value dependency)ã\80\8dを用いて解決しました。変数 ``$&`` は任意の前回のスキャンから、依存関係の結果を返す変数として定義されています。私たちはこれらの依存関係を、ファイルのMD5による要約を計算して返す ``digest`` 関数を用いて追加しました。 ::
+ç§\81ã\81\9fã\81¡ã\81¯ã\81\93ã\81®å\95\8fé¡\8cã\82\92ã\80\8eä¾\9då\98é\96¢ä¿\82ã\82\92示ã\81\99å\80¤(value dependency)ã\80\8fを用いて解決しました。変数 ``$&`` は任意の前回のスキャンから、依存関係の結果を返す変数として定義されています。私たちはこれらの依存関係を、ファイルのMD5による要約を計算して返す ``digest`` 関数を用いて追加しました。 ::
.SCANNER: %.o: %.c :value: $(digest $&)
gcc -MM $<
# omake demo
a
-ã\81\93ã\81®æ\8c¯ã\82\8bè\88\9eã\81\84ã\81«ã\81¤ã\81\84ã\81¦ã\81¯ã\80\81è°è«\96ã\81®ä½\99å\9c°ã\81\8cã\81\82ã\82\8bè\89¯ã\81\84ç\90\86ç\94±ã\81\8cã\81\82ã\82\8aã\81¾ã\81\99ã\80\82Win32ã\81®ã\82·ã\82¹ã\83\86ã\83 ä¸\8aã\81§ã\81¯ã\80\81 ``/`` ã\81¨ã\81\84ã\81\86æ\96\87å\97ã\81¯ã\80\8cã\82ªã\83\97ã\82·ã\83§ã\83³ã\81®æ\8c\87å®\9aå\90ã\80\8dとして判定されます。そして、パス名のセパレータには
+ã\81\93ã\81®æ\8c¯ã\82\8bè\88\9eã\81\84ã\81«ã\81¤ã\81\84ã\81¦ã\81¯ã\80\81è°è«\96ã\81®ä½\99å\9c°ã\81\8cã\81\82ã\82\8bè\89¯ã\81\84ç\90\86ç\94±ã\81\8cã\81\82ã\82\8aã\81¾ã\81\99ã\80\82Win32ã\81®ã\82·ã\82¹ã\83\86ã\83 ä¸\8aã\81§ã\81¯ã\80\81 ``/`` ã\81¨ã\81\84ã\81\86æ\96\87å\97ã\81¯ã\80\8eã\82ªã\83\97ã\82·ã\83§ã\83³ã\81®æ\8c\87å®\9aå\90ã\80\8fとして判定されます。そして、パス名のセパレータには
``\`` が用いられています。OMakeはファイル名を自動的に変換することで、両方のシステムで期待通りの動きをするようにしてくれます。 ::
demo: a/b
$(rootname files) : String Sequence
files : String Sequence
-``rootname`` é\96¢æ\95°ã\81¯å¼\95æ\95°ã\81«æ\8c\87å®\9aã\81\95ã\82\8cã\81\9fã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\83ªã\82¹ã\83\88ã\81\8bã\82\89å\9fºåº\95ã\81®å\90\8då\89\8dã\82\92è¿\94ã\81\97ã\81¾ã\81\99ã\80\82ã\81\93ã\81\93ã\81§ã\81®ã\80\8cå\9fºåº\95ã\81®å\90\8då\89\8dã\80\8dとは拡張子が除去されたファイル名のことです。
+``rootname`` é\96¢æ\95°ã\81¯å¼\95æ\95°ã\81«æ\8c\87å®\9aã\81\95ã\82\8cã\81\9fã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\83ªã\82¹ã\83\88ã\81\8bã\82\89å\9fºåº\95ã\81®å\90\8då\89\8dã\82\92è¿\94ã\81\97ã\81¾ã\81\99ã\80\82ã\81\93ã\81\93ã\81§ã\81®ã\80\8eå\9fºåº\95ã\81®å\90\8då\89\8dã\80\8fとは拡張子が除去されたファイル名のことです。
例えば、式 ``$(rootname dir1/dir2/a.out /etc/a.b.c /foo.ml)`` は ``dir1/dir2/a /etc/a.b /foo`` と評価されます。
10.3.6.1 ソートルール
"""""""""""""""""""""""""""""""""""
-ソートルールを使用することで、``file-sort`` 関数にさらなる制限を加えることができます。ソートルールは2つの手順を用いて宣言します。まず、ターゲットは ``.ORDER`` ターゲットに加えなければなりません。次に、ソートルールの集合が与えられていなければなりません。ソートルールには制限を定義します。 ::
+ソートルールを使用することで、 ``file-sort`` 関数にさらなる制限を加えることができます。ソートルールは2つの手順を用いて宣言します。まず、ターゲットは ``.ORDER`` ターゲットに加えなければなりません。次に、ソートルールの集合が与えられていなければなりません。ソートルールには制限を定義します。 ::
.ORDER: .MYORDER
10.4.1 glob
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-OMakeã\81®ã\82³ã\83\9eã\83³ã\83\89ã\81¯å®\9fè¡\8cã\81\95ã\82\8cã\82\8bå\89\8dã\81«ã\80\8cglobå±\95é\96\8bã\80\8dが行われます。これは、ファイル名にはディレクトリやファイル名のシーケンスに展開された *パターン* を含めることができることを意味しています。文法は標準的なbash(1),csh(1)や以下のルールに従っています。
+OMakeã\81®ã\82³ã\83\9eã\83³ã\83\89ã\81¯å®\9fè¡\8cã\81\95ã\82\8cã\82\8bå\89\8dã\81«ã\80\8eglobå±\95é\96\8bã\80\8fが行われます。これは、ファイル名にはディレクトリやファイル名のシーケンスに展開された *パターン* を含めることができることを意味しています。文法は標準的なbash(1),csh(1)や以下のルールに従っています。
* パス名は ``/`` か ``\`` の文字によって分割された、ディレクトリやファイル名から成るシーケンスです。例えば、2つのパス名 ``/home/jyh/OMakefile`` , ``/home\jyh/OMakefile`` は同一のファイルを表しています。
* Glob展開はパスの文字を元にして実行されます。もしパスが下記の特殊文字を含んでいた場合、パスはシステム上の実際にあるファイルに対してマッチしているものだけがリストされます。この展開によって、パターン文字はマッチしたすべてのファイルやディレクトリのシーケンスに展開されます。
* **mtime** : 修正日時。浮動小数点で表現されます。
* **ctime** : ステータス変更日時。浮動小数点で表現されます。
-すべてのプロパティがすべてのOS上で意味をもつわけではない点に留意してください。
+すべてのプロパティがすべてのOS上で意味をもつわけではない点に注意してください。
.. index::
single: stat()
flags : String
src, dst : Dir
-``src`` ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\82\92 ``dst`` ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81«ã\80\8cã\83\9eã\82¦ã\83³ã\83\88ã\80\8dします。これは仮想的なマウントで、 ``$(file ...)`` 関数のふるまいを変更します。 ``$(file str)`` が使われた場合、返される値はもしファイルが存在していたら ``src`` ディレクトリに関連付けられます。さもなければファイルは現在のディレクトリに関連付けられます。
+``src`` ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\82\92 ``dst`` ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81«ã\80\8eã\83\9eã\82¦ã\83³ã\83\88ã\80\8fします。これは仮想的なマウントで、 ``$(file ...)`` 関数のふるまいを変更します。 ``$(file str)`` が使われた場合、返される値はもしファイルが存在していたら ``src`` ディレクトリに関連付けられます。さもなければファイルは現在のディレクトリに関連付けられます。
``vmount`` 関数の主な目的は、分割された設定やアーキテクチャを用いて、複数のビルドを行うことをサポートするためです。
10.9 出力関数
----------------------------------
- ``print`` と ``println`` 関数を用いて出力を表示します。 ``println`` 関数は表示する値に新しく改行コードを加えます。 ``print`` 関数は加えません。 ::
+``print`` と ``println`` 関数を用いて出力を表示します。 ``println`` 関数は表示する値に新しく改行コードを加えます。 ``print`` 関数は加えません。 ::
fprint(<file>, <string>)
print(<string>)
オプション :
-* **b** : ``case`` ã\82\92è©\95価ã\81\99ã\82\8bé\9a\9bã\81«ã\83«ã\83¼ã\83\97ã\82\92ã\80\8cä¸æ\96(Break)ã\80\8dします。ただし、複数のマッチ文が選択されるような場合のみです。
+* **b** : ``case`` ã\82\92è©\95価ã\81\99ã\82\8bé\9a\9bã\81«ã\83«ã\83¼ã\83\97ã\82\92ã\80\8eä¸æ\96(Break)ã\80\8fします。ただし、複数のマッチ文が選択されるような場合のみです。
``break`` 関数はループを停止する際に用いられます。これを用いると ``awk`` 関数は即座に中断します。
$(tgetstr id) : String
id : String
-``tgetstr`` é\96¢æ\95°ã\81¯æ\8c\87å®\9aã\81\95ã\82\8cã\81\9f ``id`` ã\82\92ç\94¨ã\81\84ã\81¦ã\80\8c端æ\9c«ã\81®è\83½å\8a\9b(terminal capability, termcap)ã\80\8dを調べます。これは、"terminfo"の調査が ``TERM`` 環境変数によって与えられることを保証しています。もし与えられた"terminal capability"が定義されていなかった場合、この関数は空の値を返します。
+``tgetstr`` é\96¢æ\95°ã\81¯æ\8c\87å®\9aã\81\95ã\82\8cã\81\9f ``id`` ã\82\92ç\94¨ã\81\84ã\81¦ã\80\8e端æ\9c«ã\81®è\83½å\8a\9b(terminal capability, termcap)ã\80\8fを調べます。これは、"terminfo"の調査が ``TERM`` 環境変数によって与えられることを保証しています。もし与えられた"terminal capability"が定義されていなかった場合、この関数は空の値を返します。
.. note::
シェルプロンプト内部の ``tgetstr`` によって返された値を使用したい場合、あなたは ``prompt-invisible`` 関数を用いてラップする必要があります。
$(xterm-escape s) : Sequence
-``TERM`` ç\92°å¢\83å¤\89æ\95°ã\81\8cã\80\8cXTermã\81®ã\82¿ã\82¤ã\83\88ã\83«ã\82\92è¨å®\9aã\81\99ã\82\8bæ©\9fè\83½ã\81\8cå\88©ç\94¨ã\81§ã\81\8dã\82\8bã\80\8dことを表していた場合、 ``$(xterm-escape s)`` は ``$(xterm-escape-begin)s$(xterm-escape-end)`` と等価です。そうでない場合、この関数は空の値を返します。
+``TERM`` ç\92°å¢\83å¤\89æ\95°ã\81\8cã\80\8eXTermã\81®ã\82¿ã\82¤ã\83\88ã\83«ã\82\92è¨å®\9aã\81\99ã\82\8bæ©\9fè\83½ã\81\8cå\88©ç\94¨ã\81§ã\81\8dã\82\8bã\80\8fことを表していた場合、 ``$(xterm-escape s)`` は ``$(xterm-escape-begin)s$(xterm-escape-end)`` と等価です。そうでない場合、この関数は空の値を返します。
.. note::
シェルプロンプト内部の ``xterm-escape`` によって返された値を用いるようにしたい場合、あなたは ``prompt-invisible`` 関数を使ってラップする必要があります。
$(prompt-invisible-begin) : String
$(prompt-invisible-end) : String
-``prompt-invisible-begin`` ã\81¨ ``prompt-invisible-end`` é\96¢æ\95°ã\81¯ã\80\81ã\82·ã\82§ã\83«ã\83\97ã\83ã\83³ã\83\97ã\83\88ã\81«ã\80\8cè¦\8bã\81\88ã\81ªã\81\84ã\80\8dセクション(様々なエスケープシーケンスのような)を設定するために用いる必要のある、エスケープのシーケンスを返します。
+``prompt-invisible-begin`` ã\81¨ ``prompt-invisible-end`` é\96¢æ\95°ã\81¯ã\80\81ã\82·ã\82§ã\83«ã\83\97ã\83ã\83³ã\83\97ã\83\88ã\81«ã\80\8eè¦\8bã\81\88ã\81ªã\81\84ã\80\8fセクション(様々なエスケープシーケンスのような)を設定するために用いる必要のある、エスケープのシーケンスを返します。
.. index::
single: prompt-invisible()
$(prompt-invisible s) : Sequence
-``prompt-invisible`` ã\81¯æ\8c\87å®\9aã\81\95ã\82\8cã\81\9få¼\95æ\95°ã\82\92 ``$(prompt-invisible-begin)`` ã\81¨ ``$(prompt-invisible-end)`` ã\81§ã\83©ã\83\83ã\83\97ã\81\97ã\81¾ã\81\99ã\80\82ã\82·ã\82§ã\83«ã\83\97ã\83ã\83³ã\83\97ã\83\88ã\81«ã\80\8cè¦\8bã\81\88ã\81ªã\81\84ã\80\8dすべてのセクション(様々なエスケープシーケンスのような)はこの方法でラップしなければなりません。
+``prompt-invisible`` ã\81¯æ\8c\87å®\9aã\81\95ã\82\8cã\81\9få¼\95æ\95°ã\82\92 ``$(prompt-invisible-begin)`` ã\81¨ ``$(prompt-invisible-end)`` ã\81§ã\83©ã\83\83ã\83\97ã\81\97ã\81¾ã\81\99ã\80\82ã\82·ã\82§ã\83«ã\83\97ã\83ã\83³ã\83\97ã\83\88ã\81«ã\80\8eè¦\8bã\81\88ã\81ªã\81\84ã\80\8fすべてのセクション(様々なエスケープシーケンスのような)はこの方法でラップしなければなりません。
.. index::
single: gettimeofday()