问题
I recently started converting a game engine I wrote in Java (using lwjgl) to C/C++. I am using Qt Creator and CMake on Fedora 25 (I'm pretty sure this doesn't affect anything) to link all the directories, files, etc. GLFW is installed on my system, but I decided to use the source version, rather than the included version. I am using glad for my extension loader, and configured it following the tutorial on the GLFW website. I haven't gotten past the "Hello World" test because when I include the glad.h
file in my main.c
file, I get an error:
<glad/glad.h>: No such file or directory
What is equally strange is that I get this same error in the glad.c
file, the one that was created using glad's own generator. My main.c
file looks like this
#include <stdio.h>
#include <glad/glad.h>
#include <GLFW/glfw3.h>
int main(int argc, char *argv[])
{
printf("Kick Ass Game Engine");
return 0;
}
I have also tried using "glad.h:
instead of <glad/glad.h>
(I found that suggestion here). This did work for my main.c
file, but I still have the same issue with the glad.c
file, even after I edited it to reflect main.c
.
My project directory looks like this:
- KAGE/
-> CMakeLists.txt
-> glad.c
-> glad.h
-> main.c
-> khplatform.h
-> KAGE/lib/
-> glad
-> glfw-3.2.1
As you can see, all of my .c
and their header files are in one directory. The lib
directory is where I keep glad and glfw. I just copied the files from the lib/glad
directory to the main project one.
My CMake
looks like this
project(KAGE)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
add_subdirectory(/home/brian/KAGE/lib/glfw-3.2.1)
find_package(OpenGL REQUIRED)
target_link_libraries(KAGE glfw)
I have tried searching around, but all of the issues people had where when trying to call libraries installed on the system. Mine are not installed. I have a separate directory (lib
) where I keep everything I use. The only solution I found that came close to what I was looking for was the one about replacing <glad/glad.h>
with "glad.h"
. As I said earlier, this did not work. The tutorial on GLFW's website does not offer any other information or troubleshooting.
Any help or suggestions is greatly appreciated. Thank you.
回答1:
CMake doesn't include current directory by default. For enable this behavior you need to set CMAKE_INCLUDE_CURRENT_DIR variable:
set(CMAKE_INCLUDE_CURRENT_DIR ON)
After that for including the header your glad.c
file may use
#include "glad.h"
回答2:
Seems glad.h
is not in a directory called glad
, so including it via glad/glad.h
is just never going to work!
If you on linux one trick is make a softlink to .
called glad
and then you can have glad/glad/glad/glad/glad.h
if you want it.
Better solution is to install stuff properly so files end up at their expected paths...
回答3:
If glad folder is in the project root directory, means:
KAGE
glad
then the Cmakelist for glad:
# glad
set(GLAD_DIR "${LIB_DIR}glad")
add_library("glad" "${GLAD_DIR}/src/glad.c")
target_include_directories("glad" PRIVATE "${GLAD_DIR}/include")
target_include_directories(${PROJECT_NAME} PRIVATE "${GLAD_DIR}/include")
target_link_libraries(${PROJECT_NAME} "glad" "${CMAKE_DL_LIBS}")
if it's in a lib directory
KAGE
lib
glad
then change cmkaelist:
from set(GLAD_DIR "${LIB_DIR}glad")
to set(GLAD_DIR "${LIB_DIR}lib/glad")
来源:https://stackoverflow.com/questions/42430457/include-glad-glad-h-no-such-file-or-directory-even-though-source-and-header