Makefile为两个编译器和不同的优化技术

问题描述:

我一直在试图用两种不同的编译器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来生成不同的输出与不同的选项,如选择级别? –

第一个: 您可以一步编译和链接单个文件程序,至少可以使用我所知道的编译器。

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)规则从不同的源文件构建不同的可执行文件,但您尝试的是相反的事情。