2015-04-05 64 views
1

前段時間,我決定在Cmake學習和鑽研自己,並遇到一些煩人的問題。OSX上的Cmake Yosemite 10.10.3 - GLEW:找不到包'gl'

下面的一些教程(涉及opengl和glew),我建立了一個基本的應用程序,運行良好的Windows模擬機器,但在特定時刻,仿真不會只是做的伎倆了,我切換到Xcode和Cmake 。

所以我建立了一個基本的文件夾結構:

build 
CMakeLists.txt 
inc 
lib 
src 

lib文件夾中包含的文件夾:

glew 
glfw 

距其最初的下載(包括的CMakeLists.txt文件和所有直解壓)

爲了包含libs,我在我的根CMakeLists.txt中使用了這兩行,但是隻有在我發現「'gl'找不到」錯誤

ADD_SUBDIRECTORY(lib/glfw) 
ADD_SUBDIRECTORY(lib/glew) 

當CMake的構建,我得到這個輸出,我是不是很高興:(

Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE) 
Using Cocoa for window creation 
Using NSGL for context creation 
Building GLFW only for the native architecture 
checking for module 'gl' 
    package 'gl' not found 
CMake Error at /Applications/CMake.app/Contents/share/cmake-3.2/Modules/FindPkgConfig.cmake:340 (message): 
    A required package was not found 
Call Stack (most recent call first): 
    /Applications/CMake.app/Contents/share/cmake-3.2/Modules/FindPkgConfig.cmake:502 (_pkg_check_modules_internal) 
    lib/glew/CMakeLists.txt:26 (pkg_check_modules) 


Configuring incomplete, errors occurred! 
See also "/Users/Makkura/Dropbox/PROGRAMMING/CPLUSPLUS_SANDBOX/CMAKE/SPARKY/build/Xcode/CMakeFiles/CMakeOutput.log". 

我假設有一些錯誤的GLEW文件夾中的CMakeLists.txt文件。我可以看到針對windows和linux的特定操作,但是我看不到爲osx系統指定的任何內容。

project(GLEW) 
cmake_minimum_required(VERSION 2.4) 

if(COMMAND cmake_policy) 
    cmake_policy(SET CMP0003 NEW) 
endif(COMMAND cmake_policy) 

set(GLEW_VERSION "1.11.0") 

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) 
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) 
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) 

if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") 
    set(GLEW_LIB_NAME glew32) 
else(${CMAKE_SYSTEM_NAME} MATCHES "Windows") 
    set(GLEW_LIB_NAME GLEW) 
    set(DLL_PREFIX lib) 
endif(${CMAKE_SYSTEM_NAME} MATCHES "Windows") 

# 
# All platforms need OpenGL 
# 

include(FindPkgConfig) 
pkg_check_modules(OpenGL REQUIRED gl) 

# 
# Linux needs X11 
# 

if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") 
    find_package(X11 REQUIRED) 
endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") 

set(CMAKE_C_FLAGS "${CFLAGS} ${CMAKE_C_FLAGS} -DGLEW_BUILD -DGLEW_NO_GLU -O2 -Wall -W") 

include_directories(${PROJECT_SOURCE_DIR}/include) 

add_library(GLEW_static STATIC src/glew.c) 
add_library(GLEW_shared SHARED src/glew.c) 
set_target_properties(GLEW_static PROPERTIES OUTPUT_NAME ${GLEW_LIB_NAME} PREFIX lib) 
set_target_properties(GLEW_shared PROPERTIES OUTPUT_NAME ${GLEW_LIB_NAME} PREFIX "${DLL_PREFIX}") 
target_link_libraries(GLEW_shared ${OpenGL_LDFLAGS}) 

add_library(GLEW_MX_static STATIC src/glew.c) 
add_library(GLEW_MX_shared SHARED src/glew.c) 
set_target_properties(GLEW_MX_static PROPERTIES OUTPUT_NAME ${GLEW_LIB_NAME}mx COMPILE_FLAGS "-DGLEW_MX" PREFIX lib) 
set_target_properties(GLEW_MX_shared PROPERTIES OUTPUT_NAME ${GLEW_LIB_NAME}mx COMPILE_FLAGS "-DGLEW_MX" PREFIX "${DLL_PREFIX}") 
target_link_libraries(GLEW_MX_shared ${OpenGL_LDFLAGS}) 

add_executable(glewinfo src/glewinfo.c) 
target_link_libraries(glewinfo GLEW_shared ${OpenGL_LDFLAGS}) 

if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") 
    target_link_libraries(glewinfo ${X11_LIBRARIES}) 
endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") 

add_executable(visualinfo src/visualinfo.c) 
target_link_libraries(visualinfo GLEW_shared ${OpenGL_LDFLAGS}) 

if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") 
    target_link_libraries(visualinfo ${X11_LIBRARIES}) 
endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") 

install(
    TARGETS 
     GLEW_static 
     GLEW_shared 
     GLEW_MX_static 
     GLEW_MX_shared 
     glewinfo 
     visualinfo 
    RUNTIME DESTINATION bin 
    LIBRARY DESTINATION lib 
    ARCHIVE DESTINATION lib 
) 

install(CODE "execute_process(COMMAND bash -x -c \"sed -e 's%@[email protected]%${CMAKE_INSTALL_PREFIX}%g' -e 's%@[email protected]%\\\${prefix}%g' -e 's%@[email protected]%\\\${prefix}/lib%g' -e 's%@[email protected]%\\\${prefix}/include%g' -e 's/\@version\@/${GLEW_VERSION}/g' -e 's/\@cflags\@//g' -e 's/\@libname\@/${GLEW_LIB_NAME}/g' -e 's|@[email protected]|glu|g' < ${CMAKE_SOURCE_DIR}/glew.pc.in > ${CMAKE_BINARY_DIR}/glew.pc\")") 
install(CODE "execute_process(COMMAND bash -x -c \"sed -e 's%@[email protected]%${CMAKE_INSTALL_PREFIX}%g' -e 's%@[email protected]%\\\${prefix}%g' -e 's%@[email protected]%\\\${prefix}/lib%g' -e 's%@[email protected]%\\\${prefix}/include%g' -e 's/\@version\@/${GLEW_VERSION}/g' -e 's/\@cflags\@/-DGLEW_MX/g' -e 's/\@libname\@/${GLEW_LIB_NAME}mx/g' -e 's|@[email protected]|glu|g' < ${CMAKE_SOURCE_DIR}/glew.pc.in > ${CMAKE_BINARY_DIR}/glewmx.pc\")") 

install(FILES ${CMAKE_BINARY_DIR}/glew.pc ${CMAKE_BINARY_DIR}/glewmx.pc DESTINATION lib/pkgconfig) 

只要我沒有解決這個問題,我就不能繼續我的發展。我一直在尋找類似的問題幾天,但我找不到任何明確的解決方案。有沒有人遇到過類似的問題?

回答

4

那麼,什麼不成功就是pkg-config,試圖找到gl包,即一個gl.pc配置文件。
我不知道那個人應該在哪裏,似乎沒有關於它的文檔,也沒有任何人甚至沒有這樣的報告。
我只能假定這樣做的目標是引用/System/Library/Frameworks中的OpenGL框架,但至少在我的機器上,沒有任何地方可以找到gl.pc。 此外,試圖建立與GLEW

export CC='clang' 
export CXX='clang++' 
cd glew 
cmake . 
make 

給我你得到同樣的錯誤。

但是,我能夠手藝我自己gl.pc

PACKAGE=GL 

Name: OpenGL 
Description: OpenGL 
Version: 11.1.1 
Cflags: -framework OpenGL -framework AGL 
Libs: -Wl,-framework,OpenGL,-framework,AGL 

(該AGL框架是OpenGL的框架的一部分)
把這個文件在pkg-config會發現它的位置,我是能夠真正地建立glew。

由於您正在構建自己的cmake thingy,因此您可能不希望將此文件放在/usr/share/pkgconfig中,而是將其放置在項目文件夾中的某處並相應地設置爲PKG_CONFIG_PATH
例如如果您將gl.pc放在<your project>/pkgconfig中,請將其添加到CMakeLists的頂部。TXT:

set(ENV{PKG_CONFIG_PATH} ${CMAKE_SOURCE_DIR}/pkgconfig) 

同樣,我不知道這是否是對什麼的應該這樣做,但它工作(至少對我來說)。

+0

那麼如果我以艱難的方式做事情,你可以隨時提及它。這個想法是,無論您的計算機上安裝了什麼,您都可以始終構建整個項目,而無需在計算機上安裝多個開發人員庫。哦,順便說一句,我在我的機器上找到了一個gl.pc,位於/ opt/X11/lib/pkgconfig中,其中包含以下代碼。 '前綴= /選擇/ X11 exec_prefix = $ {PREFIX} LIBDIR = /選擇/ X11/lib目錄 了includedir = /選擇/ X11 /包括 名稱:GL 說明:梅薩OpenGL庫 Requires.private: 版本:8.0.4 Libs:-L $ {libdir} -lGL Libs.private: Cflags:-I $ {includedir} glx_tls:no' – 2015-04-05 17:19:34

+1

我目前沒有安裝X11,所以我不用沒有'/ opt'目錄。但是框架(位於'/ System/Library/Frameworks')是操作系統的一部分,因此不需要開發者庫。唯一的要求(除了'cmake' /'make' ofc)是'pkg-config',但這是glew所要求的。 – Siguza 2015-04-05 17:34:21

+0

Ohw我以爲pkg-config是cmake或某個模塊。我想我應該下載它然後把它拿下來。 – 2015-04-05 17:39:45