$(CC)と$ CCの違いは何ですか?

$(CC)と$ CCの違いは何ですか?

yocto poky環境を使用しようとしています。私は次のことをしました。

#source environment-setup-cortexa9hf-neon-poky-linux-gnueabi 

ここで、次のようにプログラムをコンパイルしようとすると:

#$(CC) hello.c -o hello.elf 

$(CC)定義されていないため、エラーが発生します。

しかし、これは$CC効果があります。 $(CC) と$CC?の根本的な違いは何か混乱しています。

ベストアンサー1

通常、Cコンパイラの名前を保持する$(CC)変数の拡張として機能するMakefilesでこれを見たことがあるとします。複数文字名の変数が拡張されるたびに、Makefileの変数拡張構文が使用されます。それ以外の場合は、リテラルは後続の変数値に展開されます(実際にはMakefileと同じ)。CC$(...)$CCCC$CC$(C)C

ただし、シェルでは構文が異なるため、$(CC)コマンド置換は実行中のコマンドの出力に置き換えられますCC。システムにそのコマンドがない場合は、「コマンドが見つかりません」というエラーが表示されます。

また、シェルではほとんどの場合と同じだと$(CC)誤って考えることもできます。中括弧は、変数拡張に従う場合にのみ必要です。${CC}$CCまもなく変数名の一部として解釈される別の文字列で構成されます。違いの例は、"$CC_hello"(変数拡張CC_hello)と"${CC}_hello"(変数拡張とその値にCC文字列を追加する)にあります。_hello他のすべてのケース${CC}では$CC。中かっこを使うことはいいえ参照拡張、${CC}つまりいいえと同じです"$CC"

Cコードのコンパイルに使用されるコンパイラの名前を保持するシェルまたは環境変数があり、コマンドラインでその変数を使用したい場合、または変数値にスペースまたはシェル"$CC"ワイルド$CCカード文字が含まれていない場合に使用します。

$CC -o hello.elf hello.c

おすすめ記事