CMake Error at project_gui/CMakeLists.txt:15 (find_package):
Could not find a package configuration file provided by "QT" with any of
the following names:
Qt6Config.cmake
qt6-config.cmake
Qt5Config.cmake
qt5-config.cmake
Add the installation prefix of "QT" to CMAKE_PREFIX_PATH or set "QT_DIR" to
a directory containing one of the above files. project_gui C:\Dev\QtProject\project_gui/CMakeLists.txt 15
環境変数の設定 QtのlibおよびbinディレクトリをPath環境変数に追加します。find_packageコマンドはこのパスから自動的に設定ファイルを検索します。
find_package()の動作原理
- 基本機能 find_package()は外部ライブラリのヘッダーファイルとライブラリパスを自動検出し、以下のコマンドで使用可能にします:
- include_directories() / target_include_directories():インクルードパス設定
- link_directories() / target_link_libraries():ライブラリリンク設定
- Moduleモード(従来方式) 動作フロー
- CMakeがCMAKE_MODULE_PATHで指定されたパスからFind<PackageName>.cmakeを検索
- スクリプトがライブラリパスとヘッダーファイルを探索
- <PackageName>_FOUND, <PackageName>_INCLUDE_DIRSなどの変数を設定
実装例
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules")
find_package(LibPNG REQUIRED)
if(LibPNG_FOUND)
target_include_directories(app PRIVATE ${LibPNG_INCLUDE_DIRS})
target_link_libraries(app ${LibPNG_LIBRARIES})
endif()
- Configモード(現代方式) 動作フロー
- <PackageName>Config.cmakeまたは<package-name>-config.cmakeを検索
- 優先検索パス:<PackageName>_DIR → CMAKE_PREFIX_PATH → システムパス
- ライブラリ提供者が定義したインポートターゲットを自動処理
実装例
set(Boost_DIR "C:/boost_1_82_0/lib/cmake")
find_package(Boost REQUIRED COMPONENTS system filesystem)
if(Boost_FOUND)
target_link_libraries(app PRIVATE Boost::system Boost::filesystem)
endif()
- 動作モードの制御
- デフォルト:Moduleモード優先 → Configモードにフォールバック
- 明示的指定:find_package(Pkg CONFIG) / find_package(Pkg MODULE)
- デバッグオプション:cmake -DCMAKE_FIND_DEBUG_MODE=ON ..
- ベストプラクティス
- Configモードを優先使用
- パスを明示的に指定:CMAKE_PREFIX_PATHまたは<PackageName>_DIR
- バージョン指定:find_package(Qt6 6.5.1 EXACT REQUIRED)
- トラブルシューティング | 問題 | 解決策 | |---|---| | ライブラリ未検出 | set(Qt6_DIR "正しいパス") で明示的指定 | | バージョン不一致 | EXACTオプションで厳密なバージョン指定 | | コンポーネント不足 | COMPONENTSで必須モジュールを明示 |
動作モード比較
| モード | トリガー | 設定ファイル | 適用ケース |
|---|---|---|---|
| Module | デフォルト/MODULE指定 | Find<Package>.cmake | レガシーライブラリ |
| Config | デフォルト/CONFIG指定 | <Package>Config.cmake | Qt6など現代ライブラリ |