2017-02-21 1 views
1

Mit MacOS Sierra, CMake 3.7.2 und Qt 5.8.0 mit Homebrew installiert. In dieser speziellen Anwendung vervollständigt Cmake ohne Fehler aber während des Build bekomme ich folgende Fehlermeldung:cmake findet Qt5Core, aber build.make meldet "Qt5 :: Core-NOTFOUND"

CMakeFiles/CereLink.dir/build.make:174: *** target pattern contains no `%'. Stop. 
make[1]: *** [CMakeFiles/CereLink.dir/all] Error 2 
make: *** [all] Error 2 

Die Codezeile hat Qt5::Core-NOTFOUND

Es ist definitiv ein Problem mit dieser Anwendung, wie ich andere QT5-abhängige Anwendungen Diese Build ist korrekt, und diese Anwendung hängt von einem ExternalProject ab, das Qt5 verbindet, das auch korrekt baut! Die problematische Anwendung kann online gefunden werden.

cmake scheint Qt5 korrekt zu finden.

Mit
FIND_PROGRAM(QT_QMAKE_EXECUTABLE_FINDQT 
NAMES 
    qmake qmake5 qmake-qt5 
PATHS 
    "${QT_SEARCH_PATH}/bin" 
    "$ENV{QTDIR}/bin" 
) 
SET(QT_QMAKE_EXECUTABLE ${QT_QMAKE_EXECUTABLE_FINDQT} CACHE PATH "Qt qmake program.") 
EXEC_PROGRAM(${QT_QMAKE_EXECUTABLE} ARGS "-query QT_INSTALL_PREFIX" OUTPUT_VARIABLE QT_INSTALL_PREFIX) 

message(${QT_INSTALL_PREFIX}) berichtet /usr/local/Cellar/qt5/5.8.0_1

find_package(Qt5 COMPONENTS Core REQUIRED) oder find_package(Qt5Core REQUIRED) beide scheinen richtig zu arbeiten. Weitere Informationen finden Sie unter Zusätzliche Informationen.

EDIT - Zusätzliche Informationen:

  • message(${Qt5Core_FOUND}) druckt 1.
  • message(${Qt5Core_LIBRARIES}) druckt Qt5::Core
  • manuell einstellen Qt5Core_DIR statt CMAKE_PREFIX_PATH nicht etwas ändert.
  • Verknüpfung Qt5Core oder ${Qt5Core_LIBRARIES} (und zusätzliche enthält) hilft nicht.
  • get_target_property(QtCore_location Qt5::Core IMPORTED_LOCATION_RELEASE): /usr/local/Cellar/qt5/5.8.0_1/lib/QtCore.framework/QtCore
+0

Welche * Konfiguration * (* CMAKE_BUILD_TYPE *) verwenden Sie zum Kompilieren Ihres Projekts? Ich bin mir nicht sicher, ob das Extrahieren von * LOCATION * -Eigenschaft für * IMPORTED * -Ziel (wie 'QT5 :: Core') sinnvoll ist: Laut [Dokumentation] (https://cmake.org/cmake/help/v3.7/prop_tgt /LOCATION.html), 'diese schreibgeschützte Eigenschaft gibt den Wert der Eigenschaft LOCATION_ für eine nicht spezifizierte Konfiguration zurück, die vom Ziel bereitgestellt wird.' – Tsyvarev

+0

Was ist mit 'target_link_libraries ($ {target} PRIVATE Qt5Core)'? Es kann sein, dass Sie die Syntax 'Qt5 :: Core' nur verwenden können, wenn Sie sie mit' find_package (Qt5 COMPONENTS Core REQUIRED) 'importieren. – oLen

+0

@Tsyvarev, das Problem besteht weiterhin, ob Debug oder Release in Xcode oder Release in gnu-make verwendet wird. Der Aufruf von 'get_target_property' sollte nur zeigen, dass das Qt5 :: Core 'target' existiert und einen vernünftigen Wert hat. –

Antwort

1

Das Problem war, dass ich CMAKE_IMPORT_LIBRARY_SUFFIX wurde überschrieben wird, während eine andere 3rd-Party-Bibliothek konfigurieren. Ich habe eine Weile gebraucht, um dieses Problem zu finden, weil es nach all den Aufrufen geschieht, Qt zu finden. Ich denke, einige Aspekte des Findens/Verknüpfens von Qt werden zurückgestellt, bis die Konfiguration abgeschlossen ist und daher, nachdem diese Variable gesetzt wurde, und diese verzögerten Aspekte müssen CMAKE_IMPORT_LIBRARY_SUFFIX verwenden. Meine Lösung bestand darin, eine neue Variable zu erstellen und sie manuell festzulegen/zu verwenden, anstatt auf CMAKE_IMPORT_LIBRARY_SUFFIX zu vertrauen.

Verwandte Themen