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

时间:2017-10-16 03:37:44

标签: gcc makefile

我一直在尝试使用此代码使用两种不同的编译器icc和gcc编译单个c程序,并使用不同的优化技术。

我尝试在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

是否可以使用单个makefile,使用不同的优化技术编译icc和gcc。我在线阅读了许多为gcc和amp;创建makefile的方法。 g ++或多个c prog.s但不是我的问题。

1 个答案:

答案 0 :(得分:0)

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

 g++ -o exe program.cpp

给出了可执行文件。

您的问题的第一个简单的makefile可能看起来如此:

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

等等。

  

$ @是目标,$&lt;是唯一的先决条件; $ ^代表所有先决条件,如果有两个或更多。

在makefile的第一行中,target all是一个虚拟对象。它迫使制造建造 先决条件progGo1,progGo2,progI1和progI2。每个可执行文件都以不同的方式构建,来自同一个源文件。

然后我们给出了每种不同的方式,你想选择编译,不同的规则。换句话说:从源文件构建可执行文件的另一种方法是不同的方法,因此它形成了不同的规则。

make实用程序可以使用相同的模式(使用%-letter)规则从不同的源文件构建不同的可执行文件,但是你正在尝试相反的事情。

相关问题