FreeBASIC マニュアルのトップに戻る

FreeBASIC PgPpcmdline

目次→その他→プリ・プロセッサ#CMDLINE←オリジナル・サイト

#CMDLINE 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

プリプロセッサー指示文

構文:
#cmdline "args..."

パラメタ:
args...
有効な Compiler Options の引数リスト(スペースで区切る)。
-print および汎用オプション -help は除く。

説明:
#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 との違い: 参照:
プリ・プロセッサ に戻る
←リンク元に戻る プログラム開発関連に戻る
ページ歴史:2022-06-04 04:07:23
日本語翻訳:WATANABE Makoto、原文著作者:fxm

ホームページのトップに戻る

表示-非営利-継承