C++ 使用cmake从源代码静态链接GLEW
我对cmake有些陌生,对glew、glfw等完全陌生。我正在学习更多关于游戏引擎和编程的知识 我的问题是使用cmake链接项目中的静态glew库 首先,我从的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_
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”,这是我最大的问题!