2017-02-21 4 views
1

MacOS Sierraを使用して、cmake 3.7.2とqt 5.8.0を自作してインストールします。この特定のアプリケーションでは、cmakeのは、エラーなしで完了しますが、ビルド時に、私は次のエラーを取得する:cmakeはQt5Coreを見つけますが、build.makeは "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 

問題のある行は、私は他のQt5依存のアプリケーションを持っているとして、それは間違いなく、このアプリケーションに問題があるQt5::Core-NOTFOUND

を持っていますこのアプリケーションは正しくビルドされたQt5をリンクするExternalProjectに依存しています。

問題のあるアプリケーションはonlineです。

cmakeが正しくQt5を見つけたようです。

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})を使用すると、/usr/local/Cellar/qt5/5.8.0_1

find_package(Qt5 COMPONENTS Core REQUIRED)またはfind_package(Qt5Core REQUIRED)両方が正しく動作するように見える報告します。証拠については下記の追加情報を参照してください。

EDIT - 追加情報:

  • message(${Qt5Core_FOUND})プリント1。手動Qt5Core_DIR代わりのCMAKE_PREFIX_PATH 何も変更しない設定
  • message(${Qt5Core_LIBRARIES})プリントQt5::Core
  • Qt5Coreまたは${Qt5Core_LIBRARIES}(およびそれに含まれるもの)をリンクすることは役に立ちません。
  • get_target_property(QtCore_location Qt5::Core IMPORTED_LOCATION_RELEASE)/usr/local/Cellar/qt5/5.8.0_1/lib/QtCore.framework/QtCore
+0

プロジェクトをコンパイルするために使用する*構成*(* CMAKE_BUILD_TYPE *)はどれですか? QT5 :: Coreのような* IMPORTED *ターゲットの* LOCATION *プロパティを抽出するのが有効かどうかは分かりません。[documentation](https://cmake.org/cmake/help/v3.7/prop_tgt)によると、 /LOCATION.html)、この読み取り専用プロパティは、指定されていないコンフィグレーションのLOCATION_ プロパティの値を返します。はターゲットによって提供されます。 – Tsyvarev

+0

'target_link_libraries($ {target} PRIVATE Qt5Core)'はどうですか? 'find_package(Qt5 COMPONENTS Core REQUIRED)'でインポートする場合にのみ、 'Qt5 :: Core'という構文を使用することができます。 – oLen

+0

@Tsyvarev、問題は、XcodeでDebugまたはReleaseを使用している場合でも、gnu-makeでReleaseを使用している場合でも存続します。 'get_target_property'の呼び出しは、Qt5 :: Core 'target'が存在し、合理的な値を持っていることを示すことを目的としていました。 –

答えて

1

問題は、他のサードパーティのライブラリを設定している間、私はCMAKE_IMPORT_LIBRARY_SUFFIXを上書きしたということでした。この問題を見つけるにはしばらく時間がかかりました。なぜなら、Qtを見つけるためのすべての呼び出しの後に起こるからです。 Qtの検索/リンクのいくつかの側面は、設定が完了してからこの変数が設定された後に延期され、これらの延期された側面はCMAKE_IMPORT_LIBRARY_SUFFIXを使用する必要があります。私の解決策は、新しい変数を作成し、CMAKE_IMPORT_LIBRARY_SUFFIXに頼る代わりに手動でそれを設定/使用することでした。

関連する問題