gpt4 book ai didi

c++ - 从源代码静态链接 GLEW 与 cmake

转载 作者:太空宇宙 更新时间:2023-11-04 12:44:19 26 4
gpt4 key购买 nike

我对 cmake 有点陌生,对 glew、glfw 等完全陌生。我正在关注 youtube channel了解有关游戏引擎和编程的更多信息。

我的问题是使用 cmake 在我的项目中链接静态 glew 库。

首先,我从 http://mcs.une.edu.au/doc/glew-devel/index.html 的 glew 源代码开始.

我通过以下方式编译它:

cd build; cmake ./cmake; make glew_s

这会使用 libGLEW.a 在构建目录中添加一个 lib 目录

我的 CMakeLists.txt 的简化版本如下所示:

cmake_minimum_required (VERSION 3.5 FATAL_ERROR)
project (TestProject CXX)

set(CMAKE_CXX_FLAGS "-std=c++11")

###########################
# GLEW
###########################
add_subdirectory(${CMAKE_SOURCE_DIR}/Dependencies/GLEW)
target_link_libraries(${PROJECT_NAME} glew)

Dependencies/GLEW 我有另一个 CMakeLists.txt:

# Add glew source and header files  
file(GLOB_RECURSE glew-lib ${CMAKE_CURRENT_SOURCE_DIR}/lib/*)
file(GLOB_RECURSE glew-headers ${CMAKE_CURRENT_SOURCE_DIR}/include/GL/*)

add_library(glew ${glew-lib} ${glew-headers})
target_include_directories(glew PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include/GL")

我将 libGLEW.a 文件的拷贝放入 lib 目录中,并且 include 目录是从 glew 源代码 include 目录中复制的。它包含 GL 目录,其中包含头文件 glew.hwglew.heglew.hglxew。 h.

当我运行 cmake 时出现错误:

CMake Error: Cannot determine link language for target "glew".  
CMake Error: CMake can not determine linker language for target: glew

glew 源代码也有一个 src 目录,里面有 glew.c,但是如果我把它放在 libs 目录中,并包含在 Dependencies/GLEW/CMakeLists.txt 喜欢:

# Add glew source and header files  
file(GLOB_RECURSE glew-lib ${CMAKE_CURRENT_SOURCE_DIR}/lib/*.c)
file(GLOB_RECURSE glew-headers ${CMAKE_CURRENT_SOURCE_DIR}/include/GL/*)
add_library(glew ${glew-lib} ${glew-headers})
target_include_directories(glew PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")

我得到错误:

CMake Error: Error required internal CMake variable not set, cmake may
be not be built correctly.
Missing variable is: CMAKE_C_COMPILE_OBJECT
CMake Error: Error required internal CMake variable not set, cmake may
be not be built correctly.
Missing variable is: CMAKE_C_CREATE_STATIC_LIBRARY

最后,我尝试在根 CMakeLists.txt 中包含 glew.c 和 header ,例如:

#########################
# GLEW
#########################
include_directories("${CMAKE_SOURCE_DIR}/Dependencies/GLEW/lib/")
include_directories("${CMAKE_SOURCE_DIR}/Dependencies/GLEW/include/GL/")

此处 cmake 将完成,但无法编译,表示类未命名类型和/或未在此范围内声明。

如有任何帮助,我们将不胜感激。我的印象是 libGLEW.a 是静态库,我所要做的就是将它与 header 一起链接和编译,但这没有用。

最佳答案

首先,我忘了用

make install

第一次使用 make 后,我使用了不正确的 libGLEW.a 文件。

包含正确的 libGLEW.a 文件后,我的目录结构有

./Dependencies/GLEW/include/GL/*.h //header files ./Dependencies/GLEW/lib/libGLEW.a //source file

最后,TopLevel CMakeLists.txt 更改为包括:

add_library(glew STATIC IMPORTED GLOBAL)

set_target_properties(glew PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/Dependencies/GLEW/lib/libGLEW.a )
set_target_properties(glew PROPERTIES INCLUDE_DIRECTORIES ${CMAKE_SOURCE_DIR}/Dependencies/GLEW/include )

如果我想从较低的 CMakeLists.txt 中包含库,例如/Dependencies/GLEW/CMakeLists.txt,那么我必须首先从那里导出库,然后将其导入到 topLevel CMakeLists.txt 文件中。

现在,为了在我的项目中使用 glew header ,我可以使用 #include 。

关于c++ - 从源代码静态链接 GLEW 与 cmake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52462053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com