无法编译Cmake项目外部库(使用GLWF(OpenGL))

6za6bjd0  于 2023-05-17  发布在  其他
关注(0)|答案(2)|浏览(282)

我想编译一个项目来开始学习OpenGL,但我不能。
当我运行CMake -G "Unix Makefiles" ..时,它生成Makefile,没有任何警告。运行Make时,编译失败。这是引发的错误。

fatal error: GLFW/glfw3.h: No such file or directory
    2 | #include <GLFW/glfw3.h>

下面是我添加库的CMakeLists.txt

cmake_minimum_required(VERSION 3.9.1)
project(TEST)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

add_library(GLFW STATIC IMPORTED GLOBAL)
set_target_properties(GLFW PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/external/GLFW/libglfw3.a )
set_target_properties(GLFW PROPERTIES INCLUDE_DIRECTORIES ${CMAKE_SOURCE_DIR}/external)

add_executable(hello ${CMAKE_SOURCE_DIR}/src/main.cpp)

target_link_libraries(hello GLFW)

在这里你可以看到我的项目树:project tree
你知道出了什么问题吗?

ztigrdn8

ztigrdn81#

你这样做:

add_library(GLFW STATIC IMPORTED GLOBAL)
set_target_properties(GLFW PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/external/GLFW/libglfw3.a )
set_target_properties(GLFW PROPERTIES INCLUDE_DIRECTORIES ${CMAKE_SOURCE_DIR}/external) # <- this line

我很确定你应该使用INTERFACE_INCLUDE_DIRECTORIES(用于添加到链接到指定属性的目标的目标的包含目录)而不是INCLUDE_DIRECTORIES(用于指定属性的目标)。对导入的目标使用INCLUDE_DIRECTORIES实际上没有任何意义,因为它是导入的--它已经构建好了。
请注意,您还可以使用the target_include_directories command设置包含目录。前

target_include_directories(GLFW INTERFACE "${CMAKE_SOURCE_DIR}/external")
n3schb8v

n3schb8v2#

我成功了
我在GLFW目标上设置包含目录,而不是hello(main.cpp)
对CMakeList.txt的更改:

set_target_properties(GLFW PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/external/GLFW/libglfw3.a )
set_target_properties(GLFW PROPERTIES INCLUDE_DIRECTORIES ${CMAKE_SOURCE_DIR}/external)
add_executable(hello ${CMAKE_SOURCE_DIR}/src/main.cpp)

set_target_properties(GLFW PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/external/GLFW/libglfw3.a )
add_executable(hello ${CMAKE_SOURCE_DIR}/src/main.cpp)
set_target_properties(hello PROPERTIES INCLUDE_DIRECTORIES ${CMAKE_SOURCE_DIR}/external)

谢谢你的评论,帮助我弄清楚了。

相关问题