如其他人所述,gcc
使用cc1
。
和其他子程序(如和)被调用的确切方式由spec文件格式决定。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的命令行选项会间接更改子流程的调用方式。但是,操作规范文件可为您提供更大的灵活性,并允许您执行命令行选项无法执行的操作,例如/programming/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