| On this page | 
vccコンパイラはVEXソースコードをHoudiniで実行可能な形式にコンパイルします。
VEXコンパイラ(vcc)ではVEXコードのコンパイル、VEX関数用ダイアログスクリプトの生成が可能です。
さらに、指定したコンテキストで利用可能なグローバル変数と関数の一覧を作ることでクィックヘルプを追加することもできます。
コマンドラインオプション ¶
Note
ほとんどのオプションには、ショートとロングの形式があります。ロング形式は、ショート形式の後に大括弧([)内に表示されます。
-h [--help] 
        
コンパイラのヘルプメッセージを表示します。
コンパイラオプション ¶
-o [--vex-output] [‹file›|-] 
        
VEXコード出力が必要な時に指定します。ファイル名が’stdout'なら、出力がコンソールに表示されます。
    --hda-output、--otl-output、--ds-outputのどれも指定しなかった場合は、このオプションが暗黙に定義されます。
    デフォルトでは、出力のファイル名はコンテキスト関数から構築されます。
    コンテキスト関数が定義されていない場合、入力のファイル名はベースとして使われます。 
    複数の入力ファイルを指定すると、ファイル名の引数が無視され、出力ファイル名は前述の規則から構築されます。
-d [--compile-all] 
        
コンテキスト関数で直接的または間接的に使われていなくても、すべての関数をVEXコードにコンパイルします。このオプションはincludeファイルの構文をチェックするのに役に立ちます。
-z [--no-optimize] 
        
最適化せずにVEXコードを生成します。
-V [--no-version-id] 
        
VEXコードにHoudiniのバージョン識別子を埋め込みません。
プリプロセッサオプション ¶
-E [--parse-only] 
        
入力ファイルを構文解析して標準出力に結果を出力するだけです。コンパイルは行ないません。
-D [--define] ‹name›[=‹value›] 
        
プリプロセッサ用のマクロを定義します。‹name›に値を指定しなかった場合は、名前が1に定義されます。
-I [--include-dir] ‹path›  
        
指定した‹path›をインクルードパスに追加します(プリプロセッサへ指示する#includeが参照するファイルのディレクトリ検索のリスト)。標準のHoudiniインクルードパスはvex/includeです。
診断オプション ¶
-w id[,id...]  
        
特定の警告と情報のメッセージの表示を抑制します。 ‹wlist›は抑制する警告番号をカンマで区切ったリストです。
-F [--Werror] 
        
抑制していない警告すべてをエラーとして扱います。
-e [--Werror-output] ‹file› 
        
診断出力すべてを標準エラー出力ではなく、指定したファイル名にリダイレクトします。
-q [--Wno-info] 
        
情報メッセージを抑制します。
-Q [--Werror-only] 
        
情報と警告のメッセージを抑制します。--Wno-infoを上書きします。
--fmessage-limit <N> 
        
停止する前に表示するメッセージの最大数を設定します。制限しない場合は0(デフォルト)に設定します。
VEXコンテキストオプション ¶
-c [--context] ‹name› 
        
コンテキスト関数を定義していない場合、これはソースをコンパイルする時に使用するVEXコンテキストを指定するために使うことができます。
-X [--list-context] ‹context› 
        
指定したVEXコンテキストで定義されているグローバル変数と関数の型や引数の数を表示します。contextの引数の値は、利用可能なVEXコンテキストをリストするために使うことができます。
アセットオプション ¶
-L [--hda-append] [‹file›|-] 
        
VEXソースから生成したデジタルアセットを、指定したHDAファイルに追加します。そのHDAファイルが存在しなかった場合は、そのHDAファイルが作成されます。
-l [--hda-output] [‹file›|-] 
        
コンテキスト関数用のデジタルアセットを、指定したHDAファイルに書き出します。そのHDAファイルが既に存在した場合は、そのHDAファイルが上書きされます。
-K [--hda-vex-section] ‹name› 
        
生成されたVEXコードは、指定したVEXコンテキストの標準セクション名ではなく、HDAの指定したセクション名に格納されます。
-a [--hda-dialog-script] ‹file› 
        
VEXソースから自動で生成されたパラメータ定義ではなく、指定したファイル内のパラメータ定義を使用します。 ダイアログスクリプトのオペレータ定義は、まだVEXソースから取り込まれます。
-U [--hda-dialog-script-only] 
        
ダイアログスクリプトをOTLに埋め込むだけです。VEXコードは追加されません。
-n [--op-name] ‹name› 
        
指定した名前をオペレータの名前として使用します。これは、コード内の#pragma opnameステートメントを上書きします。
-S [--op-script-name] ‹name› 
        
指定した名前をオペレータのスクリプト名として使用します。これは、コード内の#pragma opscriptステートメントを上書きします。
-N [--op-label] ‹name› 
        
指定した名前をオペレータのUIラベルとして使用します。これは、コード内の#pragma oplabelステートメントを上書きします。
-C [--op-icon] ‹name› 
        
指定した名前をオペレータで使用するアイコンとして使用します。これは、コード内の#pragma opiconステートメントを上書きします。
-t [--op-min-inputs] ‹N› 
        
オペレータの最小入力数を設定します。これは、コード内の#pragma opmininputs ステートメントを上書きします。
    最小入力の値は、生成するオペレータタイプに合うように調整されます。
-T [--op-max-inputs] ‹N› 
        
オペレータの最大入力数を設定します。これは、コード内の#pragma opmaxinputsステートメントを上書きします。
    最大入力の値は、生成するオペレータタイプに合うように調整されます。
ダイアログスクリプトオプション ¶
-u [--ds-output] [‹file›|-] 
        
ダイアログスクリプトを指定したファイル名に書き出します。
    --vex-outputと--hda-outputと同様に、複数の入力ファイルを指定すると、指定したファイル名が無視されて、出力ファイル名が自動的にコンテキスト関数名から、
    またはコンテキスト関数が定義されていなければ、入力ファイル名から構築されます。
プリプロセッサ ¶
コンパイラには、コメントの除去、インクルードファイルの読み込み、マクロの展開をするプリプロセッサがあります。
プリプロセッサは通常のC言語のプリプロセッサ命令の多くをサポートしています:
#define ‹name› ‹token-string›  
        
これ以降で使われている‹name›を‹token-string›に置換します。
#define ‹name›(‹arg›,...,‹arg›) ‹token-string›  
        
これ以降の‹name›のインスタンスを‹token-string›に置換します。 ‹name›への各引数は、展開中に‹token-string›に置換されます。
#undef ‹name›  
        
マクロを“未定義”にするので、これ以降で使われている‹name›は展開されません。
#include "‹filename›" 
        
ファイルの内容をソースコードのこの場所に挿入します。
    引用符(")を使うと、標準の場所(そのパスを含む)を検索する前に、現行ファイルを含むディレクトリで‹filename›を検索します。
#sinclude "‹filename›" 
        
includeと同様ですが、静かです(ファイルが見つからなくても警告もエラーも出しません)。
#includeall "‹filename›" 
        
includeと同様ですが、include検索パスを走査して、見つかったすべてのファイルをincludeします。
#ifdef ‹name›  
        
‹name›がマクロで定義されていれば、この行から次の#endifまたはelseの命令までをコンパイルします。
#ifndef ‹name›  
        
‹name›がマクロで定義されて いなければ 、この行から次の#endifまたはelseの命令までをコンパイルします。
#if ‹constant-expr›  
        
‹constant-expr›がゼロ以外に評価されれば、この行から次の#endifまたはelseの命令までをコンパイルします。
エクスプレッションは以下の演算子を使用することができます:
- 
        
        比較 ( ==,!=,<=,>=,<,>)
- 
        
        論理 AND ( &&), OR (||), NOT (!)
- 
        
        ビット演算 AND ( &), OR (|), XOR (^), NOT (~)
- 
        
        算術 ( +,-,*,/,%)
- 
        
        括弧 
エクスプレッションは以下の関数も使用することができます:
defined(‹name›) 
        
‹name›が定義済みマクロであれば1、そうでないなら0を返します。
#if defined(foo) && defined(fum)
environment(‹name›) 
        
‹name›が定義済み環境変数なら1を返します。
access(‹filename›) 
        
‹filename›がアプリケーションで読み込むことができれば1、そうでないなら0を返します。
#if access("/etc/passwd") #include </etc/passwd> #endif
strcmp(‹str1›, ‹str2›) 
        
C/C++と同じ名前の関数で、2つの文字列が同じ内容なら0を返します。各引数は、引用符で閉じた文字列またはその文字列に展開するマクロです。
#define VALUE "foo" #if strcmp(VALUE, "bar") != 0 このステートメントは、"foo" != "bar"なのでfalseです。 #endif #if !strcmp(VALUE, "foo") このステートメントは、strcmp("foo", "bar") == 0なのでtrueです。 #endif
エクスプレッションは左から右へ評価されます( 右から左へ評価するANSI C言語の規格とは異なります )。 ANSIプリプロセッサと同様に、すべての数値が整数でなければなりません。
#else 
        
#if命令がゼロと評価されれば、これ以降の行から#endifの命令までの行がコンパイルされます。
#endif 
        
条件文のセクションの終わりを示します。#ifを定義すれば必ず#endifで終わらなければなりません。
#pragma ... 
        
拡張する言語の機能を指定します。プラグマのリストを参照してください。
事前定義されたマクロ ¶
以下のマクロは事前に定義されています:
__vex 
        
このシンボルは常に定義されています。ifプリプロセッサ命令の中でこれを使うことで、そのプログラムがvccでコンパイルされているかチェックすることができます。
__vex_major 
        
コンパイラ(Houdiniバージョン番号)のメジャーバージョンの番号。
__vex_minor 
        
コンパイラ(Houdiniバージョン番号)のマイナーバージョンの番号。
__vex_build 
        
コンパイラ(Houdiniバージョン番号)のビルドバージョンの番号。
__vex_patch 
        
コンパイラ(Houdiniバージョン番号)のパッチバージョンの番号。
__LINE__ 
        
ソースファイルの現在の行番号。
__FILE__ 
        
コンパイルされているファイル。
__DATE__ 
        
現在の日付(引用符付きの文字列)。例えば、"Dec 31 1999"。
__TIME__ 
        
現在の時間(引用符付きの文字列)。例えば、"23:59:59"。
printf("Starting shader %s at %s", __FILE__, __DATE__);