项目配置
项目结构
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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。