Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用cmake从源代码静态链接GLEW_C++_Cmake_Glew - Fatal编程技术网

C++ 使用cmake从源代码静态链接GLEW

C++ 使用cmake从源代码静态链接GLEW,c++,cmake,glew,C++,Cmake,Glew,我对cmake有些陌生,对glew、glfw等完全陌生。我正在学习更多关于游戏引擎和编程的知识 我的问题是使用cmake链接项目中的静态glew库 首先,我从的glew源代码开始 我通过以下方式编写: cd build; cmake ./cmake; make glew_s 这会使用libGLEW.a将一个lib目录添加到构建目录中 my CMakeLists.txt的缩短版本如下所示: cmake_最低要求(3.5版致命错误) 项目(TestProjectCXX) 设置(CMAKE_CXX_

我对cmake有些陌生,对glew、glfw等完全陌生。我正在学习更多关于游戏引擎和编程的知识

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

首先,我从的glew源代码开始

我通过以下方式编写:

cd build; cmake ./cmake; make glew_s
这会使用libGLEW.a将一个lib目录添加到构建目录中

my CMakeLists.txt的缩短版本如下所示:

cmake_最低要求(3.5版致命错误)
项目(TestProjectCXX)
设置(CMAKE_CXX_标志“-std=c++11”)
###########################
#格洛
###########################
添加子目录(${CMAKE_SOURCE_DIR}/Dependencies/GLEW)
目标链接库(${PROJECT\u NAME}glew)
Dependencies/GLEW
中,我有另一个
CMakeLists.txt

#添加glew源文件和头文件
文件(GLOB\u RECURSE glew lib${CMAKE\u CURRENT\u SOURCE\u DIR}/lib/*)
文件(全局递归glew头${CMAKE\u CURRENT\u SOURCE\u DIR}/include/GL/*)
添加_库(glew${glew lib}${glew headers})
目标目录(glew公共“${CMAKE\u CURRENT\u SOURCE\u DIR}/include/GL”)

我将
libGLEW.a
文件的副本放入lib目录,包含目录从glew源代码包含目录复制。它保存GL目录,其中包含头文件
glew.h
wglew.h
eglew.h
、和
glxew.h

当我运行
cmake
时,我得到错误:

CMake错误:无法确定目标“glew”的链接语言。
CMake错误:CMake无法确定目标:glew的链接器语言

glew源代码也有一个src目录,其中包含
glew.c
,但是如果我将它放在
libs
目录中,并将其包含在
Dependencies/glew/CMakeLists.txt
中,就像:

#添加glew源文件和头文件
文件(GLOB\u RECURSE glew lib${CMAKE\u CURRENT\u SOURCE\u DIR}/lib/*.c)
文件(全局递归glew头${CMAKE\u CURRENT\u SOURCE\u DIR}/include/GL/*)
添加_库(glew${glew lib}${glew headers})
目标目录(glew公共“${CMAKE\U CURRENT\U SOURCE\U DIR}/include”)
我得到一个错误:

CMake错误:错误要求未设置内部CMake变量,CMake可能
不能正确建造。
缺少的变量是:CMAKE\u C\u COMPILE\u对象
CMake错误:错误要求未设置内部CMake变量,CMake可能
不能正确建造。
缺少的变量是:CMAKE\u C\u CREATE\u STATIC\u LIBRARY

最后,我尝试将
glew.c
和头文件包含在根
CMakeLists.txt
中,如下所示:

#########################
#格洛
#########################
包括目录(${CMAKE\u SOURCE\u DIR}/Dependencies/GLEW/lib/)
包含目录(${CMAKE\u SOURCE\u DIR}/Dependencies/GLEW/include/GL/)
此处
cmake
将完成,但它将无法编译,表示类不命名类型和/或未在此范围内声明


任何帮助都将不胜感激。我的印象是,
libGLEW.a
是一个静态库,我所要做的就是将它与标题一起链接并编译,但这不起作用。

首先,我忘了使用

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

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

./Dependencies/GLEW/include/GL/*.h//头文件 ./Dependencies/GLEW/lib/libGLEW.a//源文件

最后,顶级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)中包含库,那么我必须首先从那里导出库,然后在顶级CMakeLists.txt文件中导入它


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

如果文件名为
libGLEW.a
,你应该告诉CMake链接
glew
而不是
glew
@JohnZwinck:在第一个代码中,剪切的
glew
是一个目标名称,由第二个代码段创建。在CMake中,目标名称可以是任意名称。@mjp5595:您是否已经有文件
libGLEW.a
?如果是,则无需再次构建GLEW。如果否,则使用GLEW项目提供的构建过程(
make
makeinstall
),无需在CMake中(重新)实现它。获取
libGLEW.a
后,您只需调整项目的包含目录(使用
include_目录
)并链接到现有库,如本问题所述:。您使用的是什么操作系统?@Tsyvarev谢谢。我没有使用“makeinstall”,这是我最大的问题!