🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CMake

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

GLFW

GLFWは、OpenGLを使用してアプリ開発を行うためのフレームワークです。Macにも対応しているマルチプラットフォームであることが特徴。ウィンドウ管理、解像度切り替え、入力管理などの機能を持ちます。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

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

Q&A

解決済

1回答

3700閲覧

CmakeでGLFWが使えない

urk_mofmof

総合スコア3

CMake

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

GLFW

GLFWは、OpenGLを使用してアプリ開発を行うためのフレームワークです。Macにも対応しているマルチプラットフォームであることが特徴。ウィンドウ管理、解像度切り替え、入力管理などの機能を持ちます。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

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

0グッド

0クリップ

投稿2020/12/03 17:35

編集2020/12/05 04:31

現在の状況

プログラミング初心者です。
OSはWindows10です。
現在CLionを用いてGLFWを使うプログラミングをしようとしています。
CmakeLists.txtを書いてGLFWをインクルードできるようにしようとしているのですが、エラーが出てうまく動かすことができません。
当方、CmakeについてもOpenGLについても初心者であるため、どこをどう直したらよいかわかっていない状態です。
わかる方いらっしゃいましたら、ご教授お願い致します。

発生している問題・エラーメッセージ

"D:\programming\CLion\JetBrains\CLion 2020.2.5\bin\cmake\win\bin\cmake.exe" -DCMAKE_BUILD_TYPE=Debug -G "CodeBlocks - NMake Makefiles" D:\programming\CLion\JetBrains\CLProjects\Test-GLFW CMake Error at D:/programming/CLion/JetBrains/CLion 2020.2.5/bin/cmake/win/share/cmake-3.17/Modules/FindPackageHandleStandardArgs.cmake:164 (message): Could NOT find GLFW (missing: GLFW_LIBRARIES GLFW_INCLUDE_DIR) Call Stack (most recent call first): D:/programming/CLion/JetBrains/CLion 2020.2.5/bin/cmake/win/share/cmake-3.17/Modules/FindPackageHandleStandardArgs.cmake:445 (_FPHSA_FAILURE_MESSAGE) GLFW/FindGLFW_Test-master/cmake/FindGLFW.cmake:167 (find_package_handle_standard_args) CMakeLists.txt:11 (find_package) -- Configuring incomplete, errors occurred! See also "D:/programming/CLion/JetBrains/CLProjects/Test-GLFW/cmake-build-debug/CMakeFiles/CMakeOutput.log". [再ロードに失敗しました]

#該当のソースコード

このコードの大部分はこちらの回答から引用しました。

cmake_minimum_required(VERSION 3.17) project( Test_GLFW ) set( CMAKE_CXX_STANDARD 14 ) list( APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/GLFW/FindGLFW_Test-master/cmake ) set( CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/GLFW/FindGLFW_Test-master/cmake ) find_package( GLFW REQUIRED ) find_package( OpenGL REQUIRED ) include_directories( ${PROJECT_SOURCE_DIR}/GLFW/include ) link_directories( ${PROJECT_SOURCE_DIR}/GLFW/lib-mingw ) add_executable( Test-GLFW main.cpp ) target_link_libraries( Test-GLFW glfw3 gdi32 opengl32 )

試したこと

######1.FindGLFW.cmakeをいれる
ーfind_packageでFindGLFW.cmakeが見つからないといわれたので入れた。
ーーこの問題については解決。

######2.list( APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/GLFW/FindGLFW_Test-master/cmake )を書き足す。
ー1について調べている際、このサイトを見つけ、その中の回答に、この一文を書き足し上手くいったというものがあったため書き足した。
ーーその結果GLFWを見つけることはできるようになったため1は解決したが、代わりにCould NOT find GLFW (missing: GLFW_LIBRARIES GLFW_INCLUDE_DIR)というエラーが出るようになった。
ーーーー設定が不完全でエラーが起きたとの記述があるが、どこが不完全なのかわからない。

補足情報(プロジェクトの状態)

Test-GLFW

ーGLFW

ーーFindGLFW_test-master
ーーーーcmake
ーーーーーーFindGLFW.cmake

ーーinclude
ーーーーGLFW
ーーーーーーglfw3.h
ーーーーーーglfw3native.h

ーーlib-mingw
ーーーーglfw3.dll
ーーーーlibglfw3.a
ーーーーlibglfw3dll.a

ーーlib-vc2019
ーーーーglfw3.dll
ーーーーglfw3.a
ーーーーglfw3dll.a

ーCmakeLists.txt
ーmain.cpp

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

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

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

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

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

guest

回答1

0

ベストアンサー

cmake

1cmake_minimum_required(VERSION 3.17) 2project( Test_GLFW ) 3 4set( CMAKE_CXX_STANDARD 14 ) 5 6#list( APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/GLFW/FindGLFW_Test-master/cmake ) 7 8#set( CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/GLFW/FindGLFW_Test-master/cmake ) 9#find_package( GLFW REQUIRED ) 10#find_package( OpenGL REQUIRED ) 11 12include_directories( ${PROJECT_SOURCE_DIR}/GLFW/include ) 13link_directories( ${PROJECT_SOURCE_DIR}/GLFW/lib-mingw ) 14add_executable( Test-GLFW main.cpp ) 15target_link_libraries( Test-GLFW glfw3 gdi32 opengl32 )

ぶっちゃけ、include_directorieslink_directoriestarget_link_librariesも、find_package(GLFW)で設定されたものを使用していないので、find_package(GLFW)は不要です。
ついでにいうと、OpenGLも直接指定しているので同様です。

ちなみにfind_package(GLFW)は、適切なインストール作業をしてインストールしないと機能しません。(おそらくそのためにエラーになっているのではないかと)


コメントを受けて。

とりあえず「find_package」は忘れてください。
話がややっこしくなります。
(glfw3は、include_directorieslink_directoriestarget_link_librariesを適切に設定すれば、find_packageはとりあえず必要ありません。後でちゃんとするならば話は別ですけど、今はビルドが通ることに専念してください)

E:\programming\CLion\JetBrains\CLProjects\Test-GLFW\main.cpp(2): fatal error C1083: include ファイルを開けません。'GLFW/glfw3.h':No such file or directory

このエラーから察するに、include_directoriesの指定が間違っています。

「プロジェクトの状態」ですが、以下のファイルのパスは正しいですか?

  • Test-GLFW/GLFW/include/GLFW/glfw3.h
  • Test-GLFW/CmakeLists.txt
  • Test-GLFW/main.cpp

(質問文の「プロジェクトの状態」だとCmakeLists.txtmain.cppTest-GLFW/GLFWディレクトの下にあるように見えますが、エラーログを見る限り上記のようになっているので、ハッキリさせてください)
もしCmakeLists.txtTest-GLFWフォルダ以下になければ、そのようなエラーになります。

もしそれでもダメであれば、以下も試してみてください。

# (パスにスペースが入っていると適切に設定できませんので、ダブルクォーテーションでくくってください。 # エラーメッセージからスペースは入っていないようですが、念の為) include_directories( "${PREOJCT_SOURCE_DIR}/GLFW/include" )
# 昔は、このように書いていた。 include_directories( "${CMAKE_CURRENT_SOURCE_DIR}/GLFW/include" )
# もうマクロが怪しいので、直接ベタで書いてエラーが出るか確認。 # パスはエラーメッセージから推測して書いてますが、間違っていたら訂正してください。 include_directories( "E:/programming/CLion/JetBrains/CLProjects/Test-GLFW/GLFW/include" )

あと、上記のエラーとは別の話になりますが。

エラーメッセージを読む限り、コンパイラはVisualStudio2019を使っているようですが、そうであればライブラリもvs2019のものを使うべきだと思います。

#link_directories( ${PROJECT_SOURCE_DIR}/GLFW/lib-mingw ) link_directories( ${PROJECT_SOURCE_DIR}/GLFW/lib-vc2019 )

…というか、ちゃんとしたところからダウンロードしてきますか?
「vc2019」と言いながらライブラリの拡張子は「.a」?と思ってGLFWのサイトからWindows用プレコンパイルバイナリのパッケージを持ってきてみてみましたが、内容が違っているようです。

投稿2020/12/03 23:05

編集2020/12/04 13:55
katsuko

総合スコア3538

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

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

urk_mofmof

2020/12/04 05:01 編集

回答ありがとうございます。 訂正していただいたコードを使ってみたのですが、 ====================================== ``` ====================[ ビルド | Test-GLFW | Debug ]================================= "E:\programming\CLion\JetBrains\CLion 2020.2.5\bin\cmake\win\bin\cmake.exe" --build E:\programming\CLion\JetBrains\CLProjects\Test-GLFW\cmake-build-debug --target Test-GLFW [ 50%] Building CXX object CMakeFiles/Test-GLFW.dir/main.cpp.obj main.cpp E:\programming\CLion\JetBrains\CLProjects\Test-GLFW\main.cpp(1): warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 E:\programming\CLion\JetBrains\CLProjects\Test-GLFW\main.cpp(2): fatal error C1083: include ファイルを開けません。'GLFW/glfw3.h':No such file or directory NMAKE : fatal error U1077: 'C:\PROGRA~2\MIB055~1\2019\PROFES~1\VC\Tools\MSVC\1425~1.286\bin\Hostx86\x86\cl.exe' : リターン コード '0x2' Stop. NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.25.28610\bin\HostX86\x86\nmake.exe"' : リターン コード '0x2' Stop. NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.25.28610\bin\HostX86\x86\nmake.exe"' : リターン コード '0x2' Stop. NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.25.28610\bin\HostX86\x86\nmake.exe"' : リターン コード '0x2' Stop. ``` ====================================== 以上のように出ます。 GLFWが正しくインストールできていないのかと思い、この[サイト](http://mittip.hatenablog.com/entry/2013/11/19/020806)に従いインストールしなおしたのですがこのように出ます。 find_package(GLFW)を書いていないためかと思い、書き足してみたのですが今度はFindGLFW.cmakeが見つからないといわれます。 ====================================== ``` "E:\programming\CLion\JetBrains\CLion 2020.2.5\bin\cmake\win\bin\cmake.exe" -DCMAKE_BUILD_TYPE=Debug -G "CodeBlocks - NMake Makefiles" E:\programming\CLion\JetBrains\CLProjects\Test-GLFW CMake Error at CMakeLists.txt:9 (find_package): By not providing "FindGLFW.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "GLFW", but CMake did not find one. Could not find a package configuration file provided by "GLFW" with any of the following names: GLFWConfig.cmake glfw-config.cmake Add the installation prefix of "GLFW" to CMAKE_PREFIX_PATH or set "GLFW_DIR" to a directory containing one of the above files. If "GLFW" provides a separate development package or SDK, be sure it has been installed. -- Configuring incomplete, errors occurred! See also "E:/programming/CLion/JetBrains/CLProjects/Test-GLFW/cmake-build-debug/CMakeFiles/CMakeOutput.log". [再ロードに失敗しました] ``` ====================================== 自分でも検索してはみたのですが、どうしてもこの[サイト](https://qiita.com/benikabocha/items/152bc3a34a0c1e270252#%E9%85%8D%E7%BD%AE)くらいしか見つけることができません。 find_package(GLFW)の適切なインストール方法を教えていただくことは可能でしょうか?
txty

2020/12/04 07:31 編集

時間がきたので消した
katsuko

2020/12/04 13:45

長くなるので、回答文に追記しました。
urk_mofmof

2020/12/05 04:29

ありがとうございます! おっしゃる通り、ファイルのパスは間違っていました。訂正しておきます。 また、GLFWのパッケージについてですが、おそらくソースパッケージのほうを誤って持ってきてしまったようです。 訂正していただいたCmakeLists.txtの通りに書き直し、GLFWを再ダウンロードして配置した結果、うまく動かすことができました! 本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問