2017-10-16 14 views
0

私は、このコードを使って2つの異なるコンパイラiccとgccを使って異なる最適化手法で1つのcプログラムをコンパイルしようとしています。2つのコンパイラと異なる最適化手法のMakefile

私はMakefileで次のコードを使ってみました。

output: prog3.o 
    gcc prog3.o -o2 output 
    gcc prog3.o -o3 output 
    icc prog3.o -o2 output 
prog3.o: prog3.c 
    gcc -c prog3.c 
    gcc -c prog3.c 
    icc -c prog3.c 

clean: 
    rm *.o output 

私は私が実行のみの1ラウンドの出力を得た

./output、CMDを実行することにより、出力を得ました。例えば 、:

./output 
Total time taken by CPU for Matrix addition looping over row: 1.210000 
Total time taken by CPU for Matrix addition looping over column: 6.480000 

が、それは別の最適化技術とICCとgccの両方をコンパイルし、単一のmakefileを持つことが可能です。私はgcc & g ++や複数のcプログラムのメークファイルを作成するために多くの方法をオンラインで読んだが、私の問題はなかった。

+0

optレベルのように、異なるオプションで異なる出力を生成するために1つのメイクファイルを使用したいとお考えですか? –

答えて

0

最初に: 1つのステップで、少なくとも私が知っているコンパイラで、1つのファイルプログラムをコンパイルしてリンクすることができます。

g++ -o exe program.cpp 

は実行可能exeを与えます。

あなたの問題の最初の、簡単なメイクファイルはそうなります:

all: progG1 progG2 progI1 progI2 

progG1: source.cpp 
    g++ -O1 -o progG1 source.cpp 

progG2: source.cpp 
    g++ -O2 -o progG2 source.cpp 

ので

にあなたはそれを改善することができますが、いくつかのmarcros

src = source.cpp 

all: progG1 progG2 progI1 progI2 

progG1: $(src) 
    gcc -O1 -o [email protected] $< 

などで。

$が対象です。$ <は唯一の前提条件です。 $ ^は2つ以上ある場合はすべての前提条件を表します。メイクファイルの最初の行ターゲットで


すべてがダミーです。それは、 前提条件progGo1、progGo2、progI1およびprogI2を構築するようにmakeに強制します。それぞれの実行可能ファイルは、同じソースファイルとは異なる方法でビルドされます。

次に、私たちはそれぞれ異なる方法で、あなたは別のルールをコンパイルすることを選択したいと思います。言い換えれば、ソースファイルから実行可能ファイルを構築する別の方法は異なるレシピであるため、別のルールを形成します。

makeユーティリティは、同じパターン(%-letterを使用)で異なるソースファイルから異なる実行可能ファイルをビルドできますが、逆のことを試しています。

関連する問題