项目配置

项目结构

func.h

#pragma once

int add(int a ,int b);

func.cpp

#include "func.h"

int add(int a ,int b){
    return a+b;
}

main.cpp

#include <iostream>
#include "funcs/func.h"

using namespace std;

int main(){
    cout<< add(1, 2) << endl;
}

当一个.cpp文件需要调用另一个.cpp文件(非标准库)时,需要调用该.cpp文件对应的.h文件,同时该.cpp文件在实现.h的内容时,需要先用include引入它对应的.h文件
(突然感觉.h文件相当于golang中的接口,这一设计可以看出C++的设计理念还是很超前的。)

CMake的配置

多文件夹编译

#主目录下的CMakeLists.txt

#设置CMake的最低版本
cmake_minimum_required(VERSION 3.6)

 #项目名称
project(OpenGL)

 #设置C++标准的版本
set(CMAKE_CXX_STANDARD 17)

 #设置项目下依赖的目录
add_subdirectory(funcs)

 #获取项目下所有源代码文件,并存储到变量SRCS中
aux_source_directory(. SRCS)

 #设置编译器为Clang
set(CMAKE_C_COMPILER "clang")  
set(CMAKE_CXX_COMPILER "clang++")

 #第一个参数设置项目生成的可执行文件名称
 #第二个参数表示释放变量SRCS中存储的文件名,并让它们作为源码被编译
add_executable(glStudy ${SRCS})

 #表示让项目glStudy链接静态链接库funcs
target_link_libraries(glStudy funcs)
#funcs/CMakeLists.txt

#扫描同级目录下所有的.cpp文件并存储到变量FUNCS中
file(GLOB_RECURSE FUNCS ./ *.cpp)

 #将FUNCS中的所有文件编译为funcs这个库
add_library(funcs ${FUNCS})

多可执行文件(编译目标)的处理

资源文件的处理


(注意:动态链接库需要拷贝,因为其在程序的运行时才被加载。而静态链接库不需要,它会在编译期间融入进程序)

使用第三方库(静态)

项目结构

下载第三方库

GLFW官网:https://www.glfw.org/
Glad官网:https://glad.dav1d.de/(gl选择3.3以上的版本即可,Peofile选择核心模式Core,其余不动)

处理第三方库

在第三方库对应的官网下载它们后,解压缩。
将解压出的include文件夹下的所有子文件夹拖入项目的 'thirdParty/include' 文件夹当中。
再将.lib文件拖入 'thirdParty/lib' 文件夹下(如果给了.lib文件的话)。

注:由于 glad/glad.h 的实现只有 glad.c ,不是.lib文件,所以其不算第三方库,故为了方便将其与main.c放在同一目录下,最后编译的效果不受影响。
但是库中给出的include文件一定要放入 thirdParty/include 文件夹下。

CMakeLists.txt

cmake_minimum_required(VERSION 3.6)

project(OpenGL)

set(CMAKE_CXX_STANDARD 17)

#将thirdParty/include添加到默认头文件路径下
#此处定义之后在项目的.cpp文件中导入第三方库时可以通过 #include <xxx.h> 直接导入
include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/thirdParty/include)

#将thirdParty/lib文件夹作为静态库的默认路径
link_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/thirdParty/lib)

aux_source_directory(. SRCS)

set(CMAKE_C_COMPILER "clang")  
set(CMAKE_CXX_COMPILER "clang++")

add_executable(glStudy "main.cpp" "glad.c")

#将glfw3.lib链接到glStudy程序当中(CMake会自动到./thirdParty/lib目录下去寻找该库)
target_link_libraries(glStudy glfw3.lib)

main.cpp

#include <glad/glad.h>
#include <GLFW/glfw3.h> 
#include <cstdlib> // 包含EXIT_FAILURE的定义 
#include <cstdio> // 包含stderr的定义   
  
// 窗口的宽度和高度  
const int WIDTH = 800;  
const int HEIGHT = 600;  
  
// OpenGL上下文和窗口的初始化  
void initGLFW() {  
    if (!glfwInit()) {  
        fprintf(stderr, "Failed to initialize GLFW\n");  
        exit(EXIT_FAILURE);  
    }  
  
    // 配置OpenGL版本(这里是3.3核心配置文件)  
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);  
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);  
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);  
  
    // 创建窗口  
    GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "OpenGL Window", NULL, NULL);  
    if (!window) {  
        fprintf(stderr, "Failed to create GLFW window\n");  
        glfwTerminate();  
        exit(EXIT_FAILURE);  
    }  
  
    // 设置窗口的上下文为当前线程的主上下文  
    glfwMakeContextCurrent(window);  
  
    // 初始化GLEW(如果你使用它来处理OpenGL函数指针)  
    // ...  
  
    // 渲染循环  
    while (!glfwWindowShouldClose(window)) {  
        // 渲染代码在这里  
  
        // 交换缓冲区并检查事件  
        glfwSwapBuffers(window);  
        glfwPollEvents();  
    }  
  
    // 清理并退出  
    glfwTerminate();  
}  
  
int main() {  
    initGLFW();  
    return 0;  
}

编译运行

CMakeLists.txt配置好后,就可以开始编译程序了

1.创建构建目录

为了避免在源代码目录中生成编译文件,通常的做法是在源代码目录之中创建一个构建目录(如build)作为子目录。

mkdir build
cd build

2.运行CMake

确保目前处于 ./build 目录中。

cmake ..

3.编译项目

CMake配置完成并生成了构建文件,就可以使用相应的构建工具来编译项目了。

make

愚人猫
1 声望0 粉丝

编程是我的业余爱好,但愿退休后能够天天编程……