プリプロセッサー指示文
構文:
#cmdline "args..."
パラメタ:
説明:
#cmdline は、最初に指定された fb ソースファイル内から
compiler options を指定できるようにするプリプロセッサ指示です。
最初のソースファイルは、fbc コンパイラを呼び出すシェルまたは IDE コマンドラインで指定された最初に指定された「.bas」ファイルです。
最初のソースファイルで指定された
#cmdline 指示は、その後にコンパイルされるすべてのソースファイルに影響します。
最初のソースファイル以外のソースファイル内の
#cmdline 指示は無視されます。
#cmdline はモジュール スコープでのみ許可され、
#if プリプロセッサ命令文で条件付きで処理できます。
#cmdline 文は、宣言文または実行文の前に指定する必要があります。
最初の宣言文または実行文の後の
#cmdline 文はすべて無視されます。
#cmdline 指示は、ソースファイルに表示される、最初の「.bas」ソースファイルの最初のパスで処理されます。
#cmdline 命令文で無効なコマンドライン・オプションが指定されていると、コンパイルはすぐに中止されます。
ソースファイルの 2番目のパスでは
#cmdline 指示は無視されます。たとえ条件付き
#if が 2番目のパスで何か異なるものを追加する場合でもです。
まず、fbc は通常どおり初期化され、シェルや IDE の
fbc ... コマンドラインから与えられたオプションを使って fb ソースコードの解析を開始します。
#cmdline 指示が処理されると、それらは現在のコンパイラ構成に併合されます。
検出されたコマンドライン・オプションに応じて、fbc は解析を続行するか、パーサーを再起動するか、fbc を再起動できます(例:
#cmdline "-mt" 後で再起動しない、
#cmdline "-gen gcc" 後でパーサーを再起動する、
#cmdline "-target win64" 後でビルドを再開する )。
fbc には、ソース内のすべての
#cmdline 指示が処理されたことを検出する巧妙な方法がないため、必要に応じて fbc に次の処理を指示する 2つの疑似コマンドライン・オプションがあります:
#cmdline "-end"
パーサーを再起動するか、必要に応じてビルドするオプション。
#cmdline "-restart"
常にビルドを再開するオプション。
#cmdline "-end" も #cmdline "-restart" も検出されなかった場合、fbc は最初のソースファイルの最後まで処理を続行し、必要な場合にのみ再起動します。
shell/IDE コマンドライン・オプションに
-z nocmdline を追加すると、ソース内の
#cmdline 指示が完全に無視され、ユーザーは shell/IDE
fbc コンパイラ・コマンドラインだけを使ってすべてのソース指示を上書きできます。
shell/IDE コマンドライン・オプションに
-w all を追加すると、無視された
#cmdline 指示についての警告を取得できます。
例:
ソースに簡単なオプションを追加して、GCC の最適化レベルを設定します:
#cmdline "-O 2"
Print __FB_OPTIMIZE__ '' just to check the optimization level
Sleep
#cmdline が処理されない場合('invalid command-line option' 「無効なコマンドラインオプション」エラーメッセージは報告されません):
(fbc パーサーは #cmdline をチェックするときにアクティブなので、他のソースコードと同じルールに従うことが期待されます)
'' not processed in single line comments
'#cmdline "asdf"
'' not processed in multi line comments
/'
#cmdline "-asdf"
'/
'' not processed in strings
Print "#cmdline ""-asdf"""
'' not processed if skipping over a conditional
#if 0
#cmdline "-asdf"
#endif
'' not processed when defining macros (as long as the macro is not called)
#macro DOARGS
#cmdline "-asdf"
#endmacro
Sleep
与えられた実際の
fbc ... コンパイラ・コマンドライン・オプションに基づいてソースにオプションを設定します。
(デバッグ・オプション '-g' が
fbc ... コンパイラのコマンドラインで指定されると、完全なエラーチェックが行われます)
'' '-g' command line option given on the real ##//fbc ...//## compiler command line?
#if __FB_DEBUG__
#cmdline "-exx -w pedantic -w constness"
#endif
main.bas と tools.bas の 2つのモジュールから始めて、すべてのモジュールのグローバルシンボルを定義し、ひとつの '$ fbc main.bas' コンパイラ・コマンドラインで、両方をコンパイルします:
(2つのモジュールが別々にコンパイルされてからリンクされるため、これは、main.bas の #include tools.bas とは異なります)
'' main.bas
''
'' compile with:
'' $ fbc main.bas
''
'' and will be same as if we did:
'' $ fbc main.bas tools.bas -d DoTrickyStuff
'' add the tools module
#cmdline "-b tools.bas" '' or: #cmdline "tools.bas"
'' gobal #define for all modules
#cmdline "-d DoTrickyStuff"
Declare Function IsTrickyTools() As Boolean
#ifdef DoTrickyStuff
Print "DoTrickyStuff is defined in the main.bas module"
#endif
If IsTrickyTools() Then
Print "DoTrickyStuff is defined in the tools.bas module"
End If
Sleep
'' tools.bas
''
Function IsTrickyTools() As Boolean
#ifdef DoTrickyStuff
Return True
#else
Return False
#endif
End Function
バージョン:
QB との違い:
参照: