2011-07-31 14 views
6

GLFW:cmake OpenGL kullanılarak Glew için bayraklar ve ben bu basit koduna sahip

#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; 
} 

ve benim CmakeLists.txt içinde: "cmake"

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

çalışan Herhangi bir hata üretmek, ancak irade yapmak çalıştıran diyor değildir: çalışan

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

ise:

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

başarıyla hatasız kod derler. Cmake kodumla nasıl çalışırım? i ana fonksiyona bu satırları eklerseniz

ayrıca: Aynı bayraklarıyla

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); 

bile çalışan gcc hata üretecektir:

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) 

i Kubuntu'da dayalı linux nane koşuyorum 10.04, cmake v2.8, libglfw-dev, libglfw2, libglew1.5, libglew1.5-dev, glew-utils.

Ben cmake, glew ve glfw için yeni. Yardımınız için teşekkürler!

Şerefe!

cevap

3

P CKağıt makefile yürütülürken oluşturulan komutları görmek için, hem yapmak çalıştırın:

make VERBOSE=1 

CKağıt projelerini ayıklarken komutlarını gördükten çok yararlıdır. sağlanan Örneğin, aşağıdaki komutları çalıştırılır: CMake tarafından oluşturulan

/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 

makefiles bireysel olarak (bu -c gcc yaptığı iştir) bir nesne dosyası içine her kaynak dosyasını derlemek ve sonra tüm bağlayacak nesne dosyaları ayrı bir komutla birlikte. Sağlanan örnekle, OpenGL ile ilgili kütüphaneler, bağlantı aşamasında değil, derleme aşamasında belirtilir. Kütüphaneleri add_definitions ile belirtmek yerine target_link_libraries komutu kullanılmalıdır.

böyle

A CMakeLists.txt dosya çalışması gerekir: target_link_libraries otomatik olarak -l önek katacak çünkü

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 önek kütüphaneler için belirtilmesi gerekmez UNIX/Linux ortamları ve Windows ortamları için .lib uzantısı. target_link_libraries hakkında daha fazla bilgiyi http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:target_link_libraries

+0

Açıklama için teşekkürler. Linkler için teşekkürler – pixelblender

4

adresinde bulabilirsiniz. Burada cmake with glfw'yi nasıl kullandığımı görebilirsiniz.http://code.google.com/p/assembly3d/source/browse/tools/viewer/CMakeLists.txt

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

Ayrıca ubuntu içinde GLFW sürüm 2.6 olduğu GLFW bulmak için FindGLFW.cmake kullanın. GLFW_OPENGL_VERSION_MINOR ve GLFW_OPENGL_VERSION_MAJOR sadece glfw 2.7'de çalışıyor ve OpenGL 3.x'in sadece glfw 2.7 ile çalıştığını düşünüyorum.

En iyi

+0

denecek. şerefe! – pixelblender