zoukankan      html  css  js  c++  java
  • CMake构建OpenGL项目

    一.概要

    我们在用CMake构建一个工程(项目)的时候,需要明白如下几件事情:
    A.项目源代码在哪里?
    B.项目头文件在哪里?
    C.怎么生成静态或者动态库及库的位置?
    D.程序链接的静态库在哪里?
    E.项目中用到的已编译好的静态库库和实时编译的库与项目的依赖关系?
    如果上面这几件事你知道怎么做了,多大的工程就都不是问题了。其实主要是明白库的编译、链接的工作机制,如果不熟悉,推荐看《深入理解计算机系统》和《程序员的自我修养》这两本书,讲解得很好。对于CMake这种工具的学习,个人觉得在用中学、有需求时再学是最有效的,下面就几种我时常碰到的项目结构的构建进行说明。

    二.CMake构建OpenGL项目

    这个OpenGL项目依赖glfw、glew、glm以及opengl核心库等库文件,文件目录如下:
    这里写图片描述
    其中,如上图所示的CMakeLists.txt文件内容为:

    #为项目配置CMake的总入口,设置一些全局的变量
    cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
    project (SUMMARY_DEBUG)
    
    #SUMMARY_DEBUG_SOURCE_DIR这个变量是在指定项目名称为SUMMARY_DEBUG后自动生成的变量,
    #指的是我们在CMake GUI中为项目指定的源目录
    
    #设置GLFW库的头文件目录
    set(GLFW3_INCLUDE_DIR ${SUMMARY_DEBUG_SOURCE_DIR}/opengl_helper/include/GLFW)
    #设置GLFW库的库文件路径
    set(GLFW3_LIBRARY ${SUMMARY_DEBUG_SOURCE_DIR}/opengl_helper/x64/libs/glfw3.lib)
    
    #设置GLEW库的头文件目录
    set(GLEW_INCLUDE_DIR ${SUMMARY_DEBUG_SOURCE_DIR}/opengl_helper/include/GLEW)
    #设置GLEW库的库文件目录
    set(GLEW_LIBRARY ${SUMMARY_DEBUG_SOURCE_DIR}/opengl_helper/x64/libs/glew32.lib)
    
    #设置glm库的头文件目录,改库不需要预先进行编译,可以直接使用
    set(GLM_INCLUDE_DIRS ${SUMMARY_DEBUG_SOURCE_DIR}/opengl_helper/include/glm)
    
    #将上述的头文件目录添加到一个列表变量之中
    list( APPEND SUMMARY_DEBUG_INCLUDE ${GLM_INCLUDE_DIRS} )
    list( APPEND SUMMARY_DEBUG_INCLUDE ${GLFW3_INCLUDE_DIR} )
    list( APPEND SUMMARY_DEBUG_INCLUDE ${GLEW_INCLUDE_DIR} )
    
    #将上述的库文件目录添加到一个列表变量之中
    list( APPEND SUMMARY_DEBUG_LIBS ${GLFW3_LIBRARY} )
    list( APPEND SUMMARY_DEBUG_LIBS ${GLEW_LIBRARY} )
    
    #利用find_package命令找到OpenGL
    find_package( OpenGL REQUIRED )
    list( APPEND SUMMARY_DEBUG_LIBS ${OPENGL_gl_LIBRARY} )
    
    #设置项目的头文件包含目录
    include_directories( ${SUMMARY_DEBUG_INCLUDE} )
    
    #设置子目录
    add_subdirectory(main_project)

    这里写图片描述
    其中,如上图所示的main_project中的CMakeLists.txt文件内容为:

    cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
    project (main_project)
    
    #在当前目录下搜索头文件及源文件
    file(GLOB_RECURSE CURRENT_HEADERS  *.h *.hpp)
    file(GLOB CURRENT_SOURCES  *.cpp)
    #为头文件和源文件进行分组
    source_group("Include" FILES ${CURRENT_HEADERS}) 
    source_group("Source" FILES ${CURRENT_SOURCES}) 
    
    add_executable(main_project ${CURRENT_HEADERS} ${CURRENT_SOURCES} )
    #设置项目的外部依赖库
    target_link_libraries( main_project  ${SUMMARY_DEBUG_LIBS})

    将CMakeLists.txt文件等准备好了之后,打开CMake GUI,设置如下:
    这里写图片描述
    接着选择编译器然后分别进行Configure和Generate即可生成项目,然后用VS2013(我用的VS2013)打开项目即可运行。

    三.项目源码

    演示所用的例子的源码(包含所有的依赖库和着色器文件)可以通过如下地址下载:http://download.csdn.net/detail/linear_luo/9608080

  • 相关阅读:
    Java学习---Java代码编写规范
    移动端与Web端疫情数据展示
    Java实现邮箱验证码
    Java实现短信验证码
    利用Jsoup爬取新冠疫情数据并存至数据库
    echarts全国疫情统计可视化地图(第一阶段)
    构建之法阅读笔记04
    HDU 4628 Pieces(状压DP)题解
    ZOJ 2563 Long Dominoes(状压DP)题解
    POJ 2288 Islands and Bridges(状压DP)题解
  • 原文地址:https://www.cnblogs.com/zhiyinglky/p/5805313.html
Copyright © 2011-2022 走看看