2016-06-15 14 views
0

Ich versuche, eine einfache Qt5-Anwendung mit CMake zu erstellen Das Qt5-Projekt ist das grundlegende Projekt beim Erstellen eines neuen Projekts mit einem Widget generiert. Das Projekt baut und betreibt erfolgreich mit QtCreator widget.hVerknüpfungsfehler für grundlegende Qt5-Anwendung mit CMake

#ifndef WIDGET_H 
#define WIDGET_H 

#include <QWidget> 

namespace Ui { 
class Widget; 
} 

class Widget : public QWidget 
{ 
    Q_OBJECT 

public: 
    explicit Widget(QWidget *parent = 0); 
    ~Widget(); 

private: 
    Ui::Widget *ui; 
}; 

#endif // WIDGET_H 

widget.cpp

main.cpp

#include "widget.h" 
#include <QApplication> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    Widget w; 
    w.show(); 

    return a.exec(); 
} 

Die CMakeLists Datei gemäß dem Beispiel geschrieben wurden in der Qt5-Dokumentation angegeben. Der Pfad zum Qt5-Verzeichnis wird im Cache angegeben. http://doc.qt.io/qt-5/cmake-manual.html

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.11) 

project(test0) 

# Find includes in corresponding build directories 
set(CMAKE_INCLUDE_CURRENT_DIR ON) 
# Instruct CMake to run moc automatically when needed. 
set(CMAKE_AUTOMOC ON) 

# Find the QtWidgets library 
find_package(Qt5Widgets) 

# Tell CMake to create the executable 
add_executable(test0 WIN32 main.cpp) 

# Use the Widgets module from Qt 5. 
target_link_libraries(test0 Qt5::Widgets) 

Die Cmake Generation funktioniert gut.

Ich bekomme Verknüpfungsfehler (undefinierter Verweis auf Methoden, die zur Widget-Klasse gehören), wenn ich die App mit dem von Cmake generierten Makfile erstelle. (hier ist eine Erfassung der Fehler) http://s31.postimg.org/edefl1m6j/Capturetest0.png

Irgendwelche Tipps?

System: Windows 7

Compiler: MinGW32

Versionen: QT 5.6.1 (mingw49_32) CMake 3.6.0

+0

Können Sie uns die Kompilation Linie? 'make clean && make VERBOSE = 1' – Gui13

+0

CMake rät nicht von' widget.cpp' Datei, die "undefined" Methoden definiert. Sie müssen diese Datei explizit für add_executable auflisten: 'add_executable (test0 WIN32 main.cpp widget.cpp)'. – Tsyvarev

+0

Das stimmt, es funktioniert. Ich werde nächstes Mal vorsichtiger sein, vielen Dank! – apazat

Antwort

0

Zwei Fehler in der CMakeLists - widget.cpp muss in add_executable als expl angegeben werden ained Tsyvarev - verwenden autouic um die ui_widget.h zu schaffen, die mit der widget.ui und widget.cpp

Die Arbeits CMakeLists ist folgende:

cmake_minimum_required(VERSION 2.8.11) 

project(test0) 

# Find includes in corresponding build directories 
set(CMAKE_INCLUDE_CURRENT_DIR ON) 
# Instruct CMake to run moc automatically when needed. 
set(CMAKE_AUTOMOC ON) 
set(CMAKE_AUTOUIC ON) 

# Find the QtWidgets library 
find_package(Qt5Widgets) 

# Tell CMake to create the executable 
add_executable(test0 WIN32 main.cpp widget.cpp widget.ui) 

# Use the Widgets module from Qt 5. 
target_link_libraries(test0 Qt5::Widgets)