c++ - 如何在项目构建期间使用 cmake 构建 SDL2?
问题描述
我想让自己成为一个跨平台的图形设置。我正在尝试使用 cmake 构建 SDL2。这是我当前的 CMakeLists.txt :
cmake_minimum_required(VERSION 3.5.0 FATAL_ERROR)
set(PROJECT_NAME "OpenGLZero")
set(SDL2_DIR "external/SDL2-2.0.9")
set(GLEW_SOURCE_DIR "external/glew-2.1.0")
set(GLM_SOURCE_DIR "external/glm-0.9.9.3")
set(BUILD_SHARED_LIBS OFF CACHE BOOL "")
find_package(OpenGL REQUIRED)
add_subdirectory(${SDL2_DIR})
include_directories(${GLEW_SOURCE_DIR}/include
${GLM_SOURCE_DIR}
${SDL2_DIR}/include)
# building glew as a static library
add_library(glew STATIC
${GLEW_SOURCE_DIR}/src/glew.c
${GLEW_SOURCE_DIR}/include)
add_definitions(-DGLEW_STATIC)
add_executable(${PROJECT_NAME} src/main.cpp)
target_link_libraries(${PROJECT_NAME} SDL2main SDL2 ${OPENGL_LIBRARY} glew)
尽管我正在链接库,但它无法SDL2.dll
在 Windows 上找到文件(存在于 中)。build\external\SDL2-2.0.9\Release\
链接 using${SDL2_LIBRARIES}
在这里不起作用,可能是因为我没有使用find_package
包含所有路径的。我没有使用find_package
,因为我想从头开始构建 SDL2,而不是为 Windows 和 Mac 传递二进制文件并使用 apt 在 linux 中安装 SDL2。我应该怎么做才能允许使用通用方法来查找 SDL2 库而无需提供二进制文件?
解决方案
使用add_subdirectory
方法构建其他库时,最好与库目标链接,而不是文件。
如果你查看 SDL2 的CMakeLists.txt,你会发现静态库目标的名字是SDL2-static
,所以你需要链接它而不是SDL2
.
您是否会使用find_package()
方法(使用预安装的二进制文件),静态 SDL2 库目标的名称将是SDL2::SDL2-static
(前缀XXX::
表示目标是导入的)。
推荐阅读
- sql - 在使用触发器插入/更新之前检查某些列的特定值
- jenkins - Jenkins 和应用引擎中的 Selenium 执行问题
- javascript - 使用从 .js 文件到 .cs 文件的变量
- ios - 同一站点仅通过蜂窝网络而不是通过 WiFi 产生“太多重定向”
- webgl - Webgl - 将深度渲染到纹理在 Safari 中返回 gl.INVALID_FRAMEBUFFER_OPERATION
- mysql - 使用 JOIN 更新 MYSQL MARIA DB 中的值
- python - 在 django 中插入指定日期范围的数据
- r - 如何将代码行包装到可以在 R 中使用一个命令运行的函数中?
- php - 如何在 Laravel 6.x 中构建基于条件的查询?
- java - 在 Eclipse 中,变量不显示扩展类的子变量