2017-10-16 107 views
0

我一直在試圖用兩種不同的編譯器icc和gcc用不同的優化技術使用這段代碼編譯一個單獨的c程序。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 

我通過執行CMD得到一個輸出,./output

我得到輸出進行一輪僅執行的。 例如:

./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 prog.s創建makefile,但不是我的問題。

+0

你的意思是你想使用一個makefile來生成不同的輸出與不同的選項,如選擇級別? –

回答

0

第一個: 您可以一步編譯和鏈接單個文件程序,至少可以使用我所知道的編譯器。

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] $< 

等。

$ @是目標,$ <是唯一的先決條件; $ ^代表所有先決條件,如果有兩個或更多。


在生成文件目標的所有的第一行是僞。它強制建立 先決條件progGo1,progGo2,progI1和progI2。每個可執行文件都以不同的方式與相同的源文件構建。

然後我們給出每種不同的方式,你想選擇編譯一個不同的規則。換句話說:從源文件構建可執行文件的另一種方式是不同的配方,因此它形成了不同的規則。

make實用程序可以使用相同模式(使用%-letter)規則從不同的源文件構建不同的可執行文件,但您嘗試的是相反的事情。