web-dev-qa-db-ja.com

GLEWとCMakeのリンク

GLEWをCMakeを使用してプロジェクトにリンクするにはどうすればよいですか?

CMakeを使用してGLEWを少なくとも3時間プロジェクトにリンクしようとして成功していませんでした。

CMake 3.1.0に付属のFindGLEW.cmakeを使用しています

CMakeLists.txt

_find_package(GLEW REQUIRED)
if (GLEW_FOUND)
    include_directories($(GLEW_INCLUDE_DIRS))
endif()
_

環境変数

enter image description hereenter image description here

MinGW w64を使用してソースをコンパイルし、インクルードとlibsをそれぞれのフォルダーにコピーするだけでGLFWとGLMを正常にリンクしましたが、GLEWで同じことを行った後、CMakeはまだ見つかりませんでしたそれ。

質問の作成中に十分な説明ができなかった場合は申し訳ありません。必要な追加情報を提供します。


編集:CMakeキャッシュファイルで場所を指定することでヘッダーファイルをリンクすることができましたが、glewInit()などのグロー関数への未定義の参照を取得しています。

16
Lord Zsolt

FindGLEWなどの典型的なCMakeスクリプトは、プロジェクトに必要なパスとファイルを指定する変数を定義します。スクリプトが正しいパスを自動的に識別できない場合(通常は標準ではないインストール場所が原因です)、これらの変数は入力する必要があります。

コマンドラインCMakeでは、-Dフラグを使用して、特定の変数の値を定義および設定します。 CMake-guiやIDE統合などの他のCMakeインターフェースは、この機能を他の方法で提供します。

ただし、キャッシュを直接変更して(CMakeCache.txt)、そこでCMakeが使用しているものを確認するか、キャッシュを完全にクリアすることもできます。変更を有効にするには、CMakeを再実行する必要があります。

リンクに関しては、リンクするライブラリをCMakeに伝える必要があります。使用 link_librariesコマンドは、自動化スクリプトが提供するものを使用します。

find_package(GLEW REQUIRED)
if (GLEW_FOUND)
    include_directories(${GLEW_INCLUDE_DIRS})
    link_libraries(${GLEW_LIBRARIES})
endif()
20
Jonny D

find_package(GLEW)の秘密は、CmakeをインストールしたFindGLEW.cmakeファイルにあります。

find_path(GLEW_INCLUDE_DIR GL/glew.h)
find_library(GLEW_LIBRARY NAMES GLEW glew32 glew glew32s PATH_SUFFIXES lib64)

find_pathおよびfind_libraryコマンドは、標準のシステムパスでパスを検索します。ユーザー定義のディレクトリでパスを検索する場合は、それらを指定する必要があります。例えば:

set(CMAKE_PREFIX_PATH "d:/libs/glew-1.10.0")
set(CMAKE_LIBRARY_PATH "d:/libs/glew-1.10.0/lib/Release/Win32/")
find_package(GLEW REQUIRED)

参照:

9
maxint

他の回答も明らかに機能しますが、ターゲットベースのスタイルのcmakeは、GLEWの検索モジュールがインポートされたターゲットGLEW::GLEWを定義するため、さらに簡単になります。あなたに必要なのは:

find_package(GLEW REQUIRED)
target_link_libraries(YourTarget GLEW::GLEW)

YourTargetは、add_executableまたはadd_libraryで作成したターゲットです。インクルードディレクトリを明示的に追加する必要はありません。ターゲットをリンクすることで自動的に追加されます。

3
AlbertM

私は、Macのコマンドラインからグローをcmakeにリンクするのに苦労していました。これは役立つかもしれませんが、よくわかりません:)私がやったことをステップバイステップで説明します。

web からCmakeソースをインストールしました。

次に、ターミナルのcmakeフォルダー内に移動して入力しました

./bootstrap && make && make install 

(これにより、OSプラットフォームにcmakeコマンドラインツールがインストールされます)

いくつかの演習ファイルがあります。これらすべてのエクササイズファイル(たとえば、triangles.cpp、shader.cppなど)のためにcmakeでxcodeファイルを生成したいので、エクササイズファイルフォルダー内にディレクトリを作成しました。

$ mkdir xcode 
$ cd xcode
$ cmake -G "Xcode" ..

この時点で、Cmakeは正しいライブラリを含むすべてのxcodeファイルをインストールすることを想定しています。しかし、エラーがありました:

$ cmake -G "Xcode" ..
CMake Warning (dev) at CMakeLists.txt:3 (cmake_minimum_required):
Compatibility with CMake < 2.4 is not supported by CMake >= 3.0.
This warning is for project developers.  Use -Wno-dev to suppress it.

system name is: Darwin-14.1.0
system processor is: x86_64
-- Could NOT find GLEW (missing:  GLEW_INCLUDE_DIR GLEW_LIBRARY) 
-- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE) 
-- Using Cocoa for window creation
-- Using NSGL for context creation
-- Building GLFW only for the native architecture

CMake Error: The following variables are used in this project, but they are  set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
GLEW_LIBRARY
linked by target "TextureLoader" in directory /Users/Mydir/Desktop/Exercise/Exercise Files

-- Configuring incomplete, errors occurred!

次に、GLEWとそのすべてのライブラリを正しくインストールしたことを確認するために、実行しました

$brew install glew 

はい、既にGlewをインストールしていますが、リンクされていません。以下の警告を参照してください。

Warning: glew-1.12.0 already installed, it's just not linked

次に、次のコマンドを実行しました。

$ brew unlink glew 
$ brew link glew

そして、私はエラーを解決しました。したがって、リンクグリューを確認してください。お役に立てれば。

ハッピーコーディング:)

1
Sdembla