我在Windows上使用QtCreator,我想知道如何让我的编译器优化输出。
我的理解是MinGW是GCC的一个端口。所以,我应该能够使用诸如 -O2 之类的参数。但是,在“项目”栏中,我看到的唯一内容是:
所以,我试图在“Make arguments”框中添加-O2,但遗憾的是,我收到错误“invalid option --O”
对于任何有兴趣的人,我都试图实现the Ackermann function,因为我读到了:
Ackermann功能,由于它的定义非常极端 深度递归,可以作为编译器能力的基准 优化递归
代码(实际上并不使用Qt):
#include <QtCore/QCoreApplication>
#include <QDebug>
#include <ctime>
using namespace std;
int nbRecursion;
int nbRecursions9;
int Ackermann(int m, int n){
nbRecursion++;
if(nbRecursion % 1000000 == 0){
qDebug() << nbRecursions9 << nbRecursion;
}
if(nbRecursion == 1000000000){
nbRecursion = 0;
nbRecursions9++;
}
if(m==0){
return n+1;
}
if(m>0 && n>0){
return Ackermann(m-1,Ackermann(m, n-1));
}
if(m>0 && n==0){
return Ackermann(m-1,1);
}
qDebug() << "Bug at " << m << ", " << n;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
nbRecursion = 0;
nbRecursions9 = 0;
int m = 3;
int n = 13;
clock_t begin = clock();
Ackermann(m,n);
clock_t end = clock();
double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
qDebug() << "There are " << CLOCKS_PER_SEC << " CLOCKS_PER_SEC";
qDebug() << "There were " << nbRecursions9 << nbRecursion << " recursions in " << elapsed_secs << " seconds";
double timeX = 1000000000.0*((elapsed_secs)/(double)nbRecursion);
if(nbRecursions9>0){
timeX += elapsed_secs/(double)nbRecursions9;
}
qDebug() << "Time for a function call : " << timeX << " nanoseconds";
return a.exec();
}
答案 0 :(得分:2)
-O2
。只有调试版本不使用优化。无论如何,如果要使用特定的编译器选项,可以在项目文件(*.pro
)中自行添加QMAKE_CFLAGS_RELEASE
(对于C文件)和QMAKE_CXXFLAGS_RELEASE
(对于C ++文件)。例如:
QMAKE_CFLAGS_RELEASE += -O3 -march=i686 -mtune=generic -fomit-frame-pointer
QMAKE_CXXFLAGS_RELEASE += -O3 -march=i686 -mtune=generic -fomit-frame-pointer
如果您确实想要始终使用某些特定选项,无论是调试还是发布版本,请改为追加QMAKE_CFLAGS
和QMAKE_CXXFLAGS
。但通常情况下,您只需要在发布版本中使用优化选项,而不是调试选项。