2012-11-02 68 views
0

我在Windows上使用QtCreator,並且我想知道如何讓我的編譯器優化輸出。QtCreator與MinGW:如何使編譯器優化

我的理解是MinGW是GCC的一個端口。所以,我應該能夠使用參數,如-O2。然而,在「項目」欄中,我看到的唯一的事情是:對於QMAKE

  • 構建步驟(可能不在這裏,QMAKE是對的.pro文件/ MOC/Qt的東西......)
  • 構建步驟爲的mingw32-MAK​​E(可能)
  • 清潔步驟(可能不是)

所以,我想在「使參數」對話框中添加-02,但不幸的是,我得到一個錯誤「無效選項--O「


任何有興趣,我試圖使the Ackermann function的實現,因爲我讀到:

阿克曼的功能,由於其在極其 深遞歸的術語定義,可以作爲一個標杆編譯器的能力 優化遞歸

的代碼(這並沒有真正使用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(); 
} 

回答

2

-O2默認情況下在您執行發佈構建時使用。只有調試版本不使用優化。無論如何,如果您想要使用特定的編譯器選項,請在QMAKE_CFLAGS_RELEASE(對於C文件)和QMAKE_CXXFLAGS_RELEASE(對於C++文件)中附加選項,然後在項目文件(*.pro)本身中執行此操作。例如:

QMAKE_CFLAGS_RELEASE += -O3 -march=i686 -mtune=generic -fomit-frame-pointer 
QMAKE_CXXFLAGS_RELEASE += -O3 -march=i686 -mtune=generic -fomit-frame-pointer 

如果你真的想一直使用某些特定的選項,無論它是一個調試或發佈版本,則追加到QMAKE_CFLAGSQMAKE_CXXFLAGS代替。但通常情況下,您只需要在發佈版本中使用優化選項,而不是調試版本。