如何作为CMAKE项目的一部分构建GLEW

How to build GLEW as part of the CMake project

本文关键字:一部分 构建 GLEW 项目 何作 CMAKE      更新时间:2023-10-16

我正在制作一个使用glew的cmake项目。我想即时建立Glew(不仅是与编译的库链接)。我使用add_subDirectory将第三方库添加到我的项目中。这是我的cmakelists.txt现在的样子:

cmake_minimum_required (VERSION 2.6)
project (quokka)
#configure_file (
#  "${CMAKE_CURRENT_SOURCE_DIR}/TutorialConfig.h.in"
#  "${CMAKE_CURRENT_SOURCE_DIR}/TutorialConfig.h"
#  )
include_directories(${CMAKE_SOURCE_DIR}/../3rd_party/glew/include)
include_directories(${CMAKE_SOURCE_DIR}/../3rd_party/glfw/include)
include_directories(${CMAKE_SOURCE_DIR}/../3rd_party/freetype-2.6.2/include)
include_directories(${CMAKE_SOURCE_DIR})
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/../../temp)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_DEBUG} -Wall -std=c++11")
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
    set(OUTPUT_LIB_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/../../temp/Debug)
endif ()
if(CMAKE_BUILD_TYPE STREQUAL "Release")
    set(OUTPUT_LIB_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/../../temp/Release)
endif ()
set(GLFW ${OUTPUT_LIB_DIRECTORIES}/glfw)
set(FREETYPE ${OUTPUT_LIB_DIRECTORIES}/freetype)
set(GLEW ${OUTPUT_LIB_DIRECTORIES}/glew)
add_subdirectory(${CMAKE_SOURCE_DIR}/../3rd_party/glfw/ ${CMAKE_CURRENT_SOURCE_DIR}/../../temp/lib/glfw) 
add_subdirectory(${CMAKE_SOURCE_DIR}/../3rd_party/glew/build/cmake ${CMAKE_CURRENT_SOURCE_DIR}/../../temp/lib/glew) 
add_subdirectory(${CMAKE_SOURCE_DIR}/../3rd_party/freetype-2.6.2/ ${CMAKE_CURRENT_SOURCE_DIR}/../../temp/lib/freetype) 
add_subdirectory(Input)
add_subdirectory(Process)
add_subdirectory(Application)
add_subdirectory(View)
add_subdirectory(GameLogic)
add_subdirectory(UID)
add_subdirectory(Actor)
add_subdirectory(AssetManager)
add_subdirectory(GUI)
add_subdirectory(GraphicsEngine)
add_executable(quokka main.cpp)
target_link_libraries(quokka Input ProcessLibrary Application View GameLogic UID Actor AssetManager GUI GraphicsEngine)
target_link_libraries(quokka glfw freetype)
if (UNIX)
   target_link_libraries(quokka glew Xrandr Xinerama Xi Xcursor X11 Xxf86vm pthread GL)
endif (UNIX)
if (WIN32)
   target_link_libraries(quokka glew32 opengl32)
endif (WIN32)

您可以看到,我为第三方库指定输出目录($ {$ {$ {cmake_current_source_dir}/../temp/lib/glfw),对于glfw and freetype来说很好,但是Glew最终到了其他地方。因此,我使用此设置生成Visual Studio项目,出于某种原因,GLEW的输出目录为C:_workquokka_plustempVSProjectsbinDebug。结果,当我构建项目时,找不到GLEW32.LIB。为什么Cmake对Glew的作用与GLFW和Freetype的作用不同,以及如何使其放置在我需要的地方,而无需触摸Glew的CMake Come of Glew?

用cmake构建glew源代码。您可以在CMAKE项目文件夹上创建一个名为 ./外部的文件夹,然后将GLEW代码放入此文件夹中。

有关详细信息,请查看http://www.opengl-tutorial.org/

的教程

和可运行的项目源代码:http://www.opengl-tutorial.org/download/

add_subdirectory (external)
include_directories(
    external/AntTweakBar-1.16/include/
    external/glfw-3.1.2/include/
    external/glm-0.9.7.1/
    external/glew-1.13.0/include/
    external/assimp-3.0.1270/include/
    external/bullet-2.81-rev2613/src/
    .
)
set(ALL_LIBS
    ${OPENGL_LIBRARY}
    glfw
    GLEW_1130
)
add_definitions(
    -DTW_STATIC
    -DTW_NO_LIB_PRAGMA
    -DTW_NO_DIRECT3D
    -DGLEW_STATIC
)
target_link_libraries(FOO
    ${ALL_LIBS}
)