質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1229閲覧

CMakeのfind_packageを呼ぶタイミングで挙動が変わる理由について

altzweel

総合スコア11

CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/05/21 08:10

編集2021/05/21 08:16

CMakeの挙動の理解を深めたくて質問しています。

find_packageとprojectは呼ぶタイミングで何故挙動が変わるのでしょうか?

以下のようなことを試して、find_packageを呼ぶタイミングによって挙動が異なることを確認しました。
何故こうなるのか、ドキュメントを読んでも理解できませんでした。
CMakeの挙動を理解するための手助けいただければ幸いです。

projectのあとにfind_packageを呼ぶ

find_packageでQt(Gui フレームワーク)を読み込みたかったので以下のように記載しました。

cmake

1set( CMAKE_PREFIX_PATH "~/Qt/5.15.2/clang_64") 2 3project(proj) 4 5find_package(Qt5 REQUIRED Widgets)

これは問題なく通ります。

projectの前にfind_packageを呼ぶ

cmake

1set( CMAKE_PREFIX_PATH "~/Qt/5.15.2/clang_64") 2 3find_package(Qt5 REQUIRED Widgets) 4 5project(proj) 6

すると以下のようなエラーでした

CMake Error at /xxx/Qt/5.15.2/clang_64/lib/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake:9 (message): Failed to find "gl.h" in "/System/Library/Frameworks/OpenGL.framework/Headers;/System/Library/Frameworks/AGL.framework/Headers". Call Stack (most recent call first): /xxx/Qt/5.15.2/clang_64/lib/cmake/Qt5Gui/Qt5GuiConfig.cmake:227 (include) /xxx/Qt/5.15.2/clang_64/lib/cmake/Qt5Widgets/Qt5WidgetsConfig.cmake:93 (find_package) /xxx/Qt/5.15.2/clang_64/lib/cmake/Qt5/Qt5Config.cmake:28 (find_package) CMakeLists.txt:16 (find_package)

また、他のライブラリも試してみましたが、Boostは問題なくて、zlibやOpenCVはまた別なエラーでした。

単に利用するだけなら順序に気をつければ良いのですが、ネット上の情報だとprojectの前にfind_packageしているものもあり、何が変わるのかを知りたいです。

find_packageとprojectは呼ぶタイミングで何故挙動が変わるのでしょうか?

動作環境

  • Mac 11.2.3
  • CMake 3.20.1
  • CLion 2021.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

https://gitlab.kitware.com/cmake/cmake/-/issues/22027
project()cmake_minimum_required直後に必要らしいですね

投稿2021/05/21 08:29

asm

総合スコア15149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

altzweel

2021/05/24 03:37

あー。なるほど。 ドキュメントにも書いてあるんですね。 https://cmake.org/cmake/help/v3.20/command/project.html#usage >Call the project() command near the top of the top-level CMakeLists.txt, but after calling cmake_minimum_required(). このIssueは見つけられてなかったので参考になりました。(Issueの通りメッセージ改善してほしいですが) ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問