オプション実行のカスタマイズ

 いくつか最適化の例をあげましたが,プログラム開発作業でマシンを使用する数人のユーザーが,同一の環境でコンパイルしたいというときに,オプションはこれを使ってくださいと伝えるのも,使い勝手が悪くミスを誘発する元になってしまいます.

 その場合,/usr/lib/gcc-lib/i586-pc-Linux/2.95.3(TurboLinux7の場合)のディレクトリ下にあるspecsを編集してください.specsの例をリスト14に示します.リスト14にあるように,

  *cc1:

と,デフォルトフラグは何もありません.もし,Cコードのコンパイルでいつも“-m486”を使いたければ下記のように変更を加えます.

  *cc1:

  - -m486

 このようにすれば,一つのマシンでプログラム開発を数名で行う際の整合性が取れます.

 次回は,gccでC言語を使う場合のコンパイルオプションについて検証します.コンパイラが出力するアセンブラのソースも含めて詳細に述べたいと思います.

〔リスト14〕共通の部分式を置き換える
*asm:
%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}

*asm_final:
%|

*cpp:
%(cpp_cpu) %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} 
      %{posix:-D_POSIX_SOURCE}    %{pthread:-D_REENTRANT}

*cc1:
%(cc1_cpu) %{profile:-p}

*cc1plus:


*endfile:
%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s

*link:
-m elf_i386 %{shared:-shared}   %{!shared:     %{!ibcs:       %{!static:
       %{rdynamic:-export-dynamic}     
       %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}}     
       %{static:-static}}}

*lib:
%{shared: -lc}    %{!shared: %{mieee-fp:-lieee} %{pthread:-lpthread}
       %{profile:-lc_p} %{!profile: -lc}}

*libgcc:
-lgcc

*startfile:
%{!shared:      %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s}  %{!p:%{profile:gcrt1.o%s}
%{!profile:crt1.o%s}}}}    crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}

*switches_need_spaces:


*signed_char:
%{funsigned-char:-D__CHAR_UNSIGNED__}

*predefines:
-I/usr/include -D__ELF__ -Dunix -D__i386__ -Dlinux -Asystem(posix)

*cross_compile:
0

*version:
2.95.3

*multilib:
. ;

*multilib_defaults:


*multilib_extra:


*multilib_matches:


*linker:
collect2

*cpp_486:
%{!ansi:-Di486} -D__i486 -D__i486__

*cpp_586:
%{!ansi:-Di586 -Dpentium}     -D__i586 -D__i586__ -D__pentium -D__pentium__

*cpp_k6:
%{!ansi:-Di586 -Dk6}     -D__i586 -D__i586__ -D__k6 -D__k6__

*cpp_686:
%{!ansi:-Di686 -Dpentiumpro}     -D__i686 -D__i686__ -D__pentiumpro 
   -D__pentiumpro__

*cpp_cpu_default:
%(cpp_586)

*cpp_cpu:
-Acpu(i386) -Amachine(i386) %{!ansi:-Di386} -D__i386 -D__i386__ 
        %{mcpu=i486:%(cpp_486)} %{m486:%(cpp_486)}  %{mpentium:%(cpp_586)} 
%{mcpu=pentium:%(cpp_586)} %{mpentiumpro:%(cpp_686)} %{mcpu=pentiumpro:
   %(cpp_686)} %{mcpu=k6:%(cpp_k6)}  %{!mcpu*:%{!m486:%{!mpentium*:
   %(cpp_cpu_default)}}}

*cc1_cpu:
%{!mcpu*: %{m386:-mcpu=i386 -march=i386} %{m486:-mcpu=i486 -march=i486} 
    %{mpentium:-mcpu=pentium}   %{mpentiumpro:-mcpu=pentiumpro}}

*link_command:
%{!fsyntax-only:  %{!c:%{!M:%{!MM:%{!E:%{!S:%(linker) %l %X %{o*} 
      %{A} %{d} %{e*} %{m} %{N} %{n}             
%{r} %{s} %{t} %{u*} %{x} %{z} %{Z}   %{!A:%{!nostdlib:%{!nostartfiles:%S}}}
      %{static:} %{L*} %D %o           
                 %{!nostdlib:%{!nodefaultlibs:%G %L %G}}            
      %{!A:%{!nostdlib:%{!nostartfiles:%E}}}            %{T*}            
 }}}}}}
記事内インデックス    連載インデックスはこちら   Interfaceのトップ
GCCについて
GCCを手動で最適化してみる
最適化とは
最適化のオプション
オプション実行のカスタマイズ

Copyright 2002 岸 哲夫

Copyright 1997-2017 CQ Publishing Co.,Ltd.