Oprettelse af eksekverbar til Windows ved hjælp af Qt på Linux

Indlæg af Hanne Mølgaard Plasc

Problem



Er det muligt at oprette en eksekverbar på Linux til både Linux og Windows ved hjælp af samme Qt-kode med Eclipse? Eller er det nødvendigt at installere Qt Creator på min Linux-maskine?

Bedste reference


Hvis du vil opbygge en Windows-binær på Linux, skal du krydssammenlægge. Dette betyder at du skal have en Windows-kryds-compiler installeret plus de biblioteker, du linker med bygget med krydsompilatoren . For et grundlæggende Qt-program betyder det, at du i det mindste har brug for et kryds-kompileret Qt.


Krydskompilering har intet at gøre med Eclipse eller Qt Creator. Jeg tror ikke, at begge understøtninger krydser kompilering ud af kassen, men jeg tror du kan få dem til at gøre det.

Andre referencer 1


Selvfølgelig er det muligt at installere Qt Creator i Linux. Den samme Qt-kode kan bruges til at kompilere i Linux/Win32/Mac. Du skal dog kun bruge platformspecifik kode indenfor:


#ifdef Q\_OS\_WIN32
    qDebug() << "Executable files end in .exe";
#endif


Der er andre definitioner for andre operativsystemer. Hvis du gør det, er du sikker, og du kan vædde på, at det er cross platform-kode. :-)


Se venligst http://www.qtsoftware.com/downloads og download Qt SDK til Linux/X11 . Den indeholder Qt Creator, Assistant, Designer, et cetera. [3]

Andre referencer 2


For et stykke tid siden forsøgte jeg at gøre dette, og jeg fandt ressourcer om krydsopsamling her: http://silmor.de/qtstuff.cross.php. Endelig kompilerede jeg win32 version under Windows på grund af mangel på tid, men det skulle være muligt. [4]

Andre referencer 3


For Eclipse er der et officielt plugin. [5]



   Qt Eclipse Integration for C ++

  
  Eclipse plugin kan bruges til
  Opret programmer ved hjælp af enhver Qt-version
  siden 4.1.0.


Andre referencer 4


eksekverbar i Windows fungerer ikke i Linux og omvendt. Du kan gøre det:


#ifdef Q\_WS\_X11
QString *OS=new QString("Linux");
std::cout << OS->toStdString() << std::endl;
#endif
#ifdef Q\_WS\_WIN
QString *OS=new QString("Windows");
std::cout << OS->toStdString() << std::endl;
#endif
#ifdef Q\_WS\_MACX
QString *OS=new QString("Mac");
std::cout << OS->toStdString() << std::endl;    
#endif