2011-07-31 24 views
6

をGLFW:cmakeのフラグと、私はこの単純なコード持って

#include <stdio.h> 
#include <stdlib.h> 

#include <GL/glew.h> 
#include <GL/glfw.h> 

int main(int argc, char const* argv[]) 
{ 
    if(!glfwInit()){ 
     fprintf(stderr, "failed\n"); 
    } 

    return 0; 
} 

と私のCmakeLists.txtで: "cmakeのを"

PROJECT(test C) 
find_package(OpenGL) 
ADD_DEFINITIONS(
    -std=c99 
    -lGL 
    -lGLU 
    -lGLEW 
    -lglfw 
) 
SET(SRC test) 
ADD_EXECUTABLE(test ${SRC}) 

ランニングをどんなエラーが発生しますが、意志を作る実行すると言うしません:実行中の

test.c:(.text+0x10): undefined reference to `glfwInit' 
collect2: ld returned 1 exit status 
make[2]: *** [tut1] Error 1 

ながら:

gcc -o test test.c -std=c99 -lGL -lGLU -lGLEW -lglfw 

が正常にエラーなしでコードをコンパイルします。私のコードでcmakeを実行させるにはどうすればいいですか?また

、私はmain関数に以下の行を追加した場合:私はKubuntuのに基づいてLinuxのミントを実行している

test.c: In function ‘main’: 
test.c:14: error: ‘GLFW_OPENGL_VERSION_MAJOR’ undeclared (first use in this function) 
test.c:14: error: (Each undeclared identifier is reported only once 
test.c:14: error: for each function it appears in.) 
test.c:15: error: ‘GLFW_OPENGL_VERSION_MINOR’ undeclared (first use in this function) 
test.c:16: error: ‘GLFW_OPENGL_PROFILE’ undeclared (first use in this function) 
test.c:16: error: ‘GLFW_OPENGL_CORE_PROFILE’ undeclared (first use in this function) 

glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 4); 
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); 
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 1); 
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 

でも同じフラグとgccはエラーが生成されます実行しています10.04、cmake v2.8、libglfw-dev、libglfw2、libglew1.5、libglew1.5-dev、glew-utils。

私はcmake、glew、glfwを初めて使っています。助けてくれてありがとう!

乾杯!

答えて

3

PはCMakeのメイクファイルが実行されて生成されたコマンドを表示するには、のようにmakeを実行:

make VERBOSE=1 

cmakeのプロジェクトをデバッグするときのコマンドを見てすることは非常に有用です。提供例えば、以下のコマンドが実行される:

/usr/bin/gcc -std=c99 -lGL -lGLU -lGLEW -lglfw -o CMakeFiles/test.dir/test.c.o -c test.c 
/usr/bin/gcc CMakeFiles/test.dir/test.o -o test -rdynamic 

CMakeのによって生成されたメイクファイルを個別に(これは -C gccが何である)オブジェクトファイルに各ソースファイルをコンパイルし、その後のすべてをリンクします別々のコマンドとともにオブジェクトファイルを作成します。提供された例では、リンク段階ではなく、コンパイル段階でOpenGL関連ライブラリが指定されています。ライブラリをadd_definitionsで指定する代わりに、target_link_librariesコマンドを使用する必要があります。

このような

A CMakeLists.txtファイルが動作するはずです:target_link_librariesが自動的用-lプレフィックスを追加しますので、

cmake_minimum_required(VERSION 2.8) 
project(test C) 
add_definitions(-std=c99) 
set(SRC test.c) 
add_executable(test ${SRC}) 
target_link_libraries(test GL GLU GLEW glfw) 

-l接頭辞がライブラリを指定する必要はありませんUNIX/Linux環境、.lib Windows環境用の拡張機能です。 target_link_librariesの詳細は、http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:target_link_libraries

+0

説明のためにありがとう。それを試してみる – pixelblender

4

で見ることができます。ここでは、どのように私がglfwでcmakeを使用するかの例を見ることができます。http://code.google.com/p/assembly3d/source/browse/tools/viewer/CMakeLists.txt

は私が http://code.google.com/p/assembly3d/source/browse/tools/viewer/cmake_modules/FindGLFW.cmake

はまた、Ubuntuの中GLFWのバージョンが2.6であるGLFWを見つけるためFindGLFW.cmakeを使用しています。 GLFW_OPENGL_VERSION_MINORとGLFW_OPENGL_VERSION_MAJORはglfw 2.7で動作し、OpenGL 3.xはglfw 2.7でしか動作しないと思います。

ベスト

+0

リンクをありがとう。乾杯! – pixelblender

関連する問題