我正在学习C++开发,我想要一个可用于创建窗口的文件。当我运行构建时,它完成时没有错误,并且 CLion 和 Copilot 都无法找到任何类型的错误。但是当我运行 main.cpp 文件时,它说我的 Window.cpp 无法找到 GLFW/glfw3.h 文件。
我的 CMakeLists.txt 文件如下所示:
cmake_minimum_required(VERSION 3.27)
project(Mako)
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/dependencies/glfw-3.4")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/dependencies/glfw-3.4/include/GLFW")
find_package(OpenGL REQUIRED)
set(CMAKE_CXX_STANDARD 17)
set(SOURCE_FILES main.cpp
Window.cpp
Window.h
)
add_library(Mako ${SOURCE_FILES})
target_link_libraries(Mako glfw ${GLFW_LIBRARIES})
老实说,我的代码没什么了不起的,我有一个 Window.cpp 和 Window.h 文件以及一个我用来测试的 main.cpp。我很好奇是否需要在 Window.h 文件中包含 GLFW/glfw3.h 文件,但我不确定如何正确映射它,因为我刚刚开始学习 C++,这是完全合理的一个白痴,没有正确创建文件,也不需要 Window.h 文件,这只会导致 main.cpp 变得混乱。
窗口.cpp
#include "Window.h"
#include <GLFW/glfw3.h>
#include <cstdio>
namespace graphics
{
Window *Window::getInstance() { ... }
void Window::init_window() { ... }
}
窗口.h
#ifndef MAKO_WINDOW_H
#define MAKO_WINDOW_H
namespace graphics
{
class Window
{
Window* window;
public:
static Window* getInstance();
static void init_window();
void error_callback(int error, const char* description);
};
}
#endif //MAKO_WINDOW_H
主.cpp
#include "Window.cpp"
using namespace graphics;
int main() {
graphics::Window::init_window();
return 0;
}
我尝试将 GLFW/glfw3.h 文件包含在我的 Window.h 文件中,但遇到了一个问题,无法找到该库,但 Window.cpp 文件却找到了。我希望能够在 main.cpp 中创建 Window 类的实例。
按照 Botje 的评论,我修复了 add_subdirectory() 和 include_directories() 声明,并更改为 add_excutable() 而不是 add_library(),这似乎解决了我的问题。
我确实希望它最终可以作为一个库使用,但在我弄清楚渲染、输入和其他事情之后,这还很遥远。谢谢大家!