他の人が述べたように、gcc
使用cc1
ます。
正確な方法でこれcc1
等の他のサブプログラムcpp
とld
によって決定され実行されると呼ばれているスペックファイル形式。
現在のスペックファイルは次の方法で表示できます。
gcc -dumpspecs
関連するセクションは次のようです:
*cc1_options:
%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}} %{!iplugindir*:%{fplugin*:%:find-plugindir()}} %1 %{!Q:-quiet} %{!dumpbase:-dumpbase %B} %{d*} %{m*} %{aux-info*} %{fcompare-debug-second:%:compare-debug-auxbase-opt(%b)} %{!fcompare-debug-second:%{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}}%{!c:%{!S:-auxbase %b}} %{g*} %{O*} %{W*&pedantic*} %{w} %{std*&ansi&trigraphs} %{v:-version} %{pg:-p} %{p} %{f*} %{undef} %{Qn:-fno-ident} %{Qy:} %{-help:--help} %{-target-help:--target-help} %{-version:--version} %{-help=*:--help=%*} %{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}} %{fsyntax-only:-o %j} %{-param*} %{coverage:-fprofile-arcs -ftest-coverage}
そして、あなたはあなた自身のスペックファイルを以下で使用できます:
gcc -specs=<specs-file>
もちろん、GCCに渡されるコマンドラインオプションは、サブプロセスの呼び出し方法を間接的に変更します。ただし、specファイルを操作すると柔軟性が向上し、コマンドラインオプションではできないことを実行できます(例:https : //stackoverflow.com/questions/7493620/inhibit-default-library-paths-with-gcc
実行されているものを簡単に観察できます:
gcc -v hello_world.c |& grep cc1
サンプル出力:
/usr/lib/gcc/x86_64-linux-gnu/4.8/cc1 -quiet -v -imultiarch x86_64-linux-gnu hello_world.c -quiet -dumpbase hello_world.c -mtune=generic -march=x86-64 -auxbase hello_world -version -fstack-protector -Wformat -Wformat-security -o /tmp/ccvcVNAX.s