【问题标题】:SDL + Chipmunk CMake configSDL + 花栗鼠 CMake 配置
【发布时间】:2018-11-06 00:19:31
【问题描述】:

我想通过 CMake 将 Chipmunk2D physics framework 与 SDL 链接。

我的项目结构如下:

MyProject
    -chipmunk:
      --include
      --demo:
        ---CMakeList.txt
      --src:
       ---CMakeList.txt
      --CMakeList.txt
    -src:
      --main.cpp
    -CMakeLists.txt

我阅读了有关静态库和共享库的信息,并决定要使用静态库,因此我进入了花栗鼠文件夹并运行了 cmake 。

1.第一个CMakeList文件设置选项:

  message(STATUS "Set BUILD_STATIC option ON")
  option(BUILD_SHARED "Build and install the shared library" ON)
  option(BUILD_STATIC "Build as static library" ON)
  option(INSTALL_STATIC "Install the static library" ON)

然后:

add_subdirectory(src)
  1. 来自 src 的 CMakeList.txt 进入动作:

    
    if(BUILD_STATIC)
    message(STATUS "BUILDING chipmunk_static")
    add_library(chipmunk_static STATIC ${chipmunk_source_files})
    set_target_properties(chipmunk_static PROPERTIES OUTPUT_NAME chipmunk)
     if(INSTALL_STATIC)
       message(STATUS "INSTALL chipmunk_static ${LIB_INSTALL_DIR}")
       install(TARGETS chipmunk_static ARCHIVE DESTINATION {LIB_INSTALL_DIR})
     endif(INSTALL_STATIC)
    endif(BUILD_STATIC)
    
  2. 在演示文件夹中,CmakeFile 执行以下操作:

    
    set(chipmunk_demos_libraries
    chipmunk_static
    ${GLEW_LIBRARIES}
    ${OPENGL_LIBRARIES}
    )
    

S0 我的问题是:

  1. 我是否只需要从花栗鼠库运行 Makefile 一次,以便构建静态库?
  2. 在我的 Cmakefile 中包含来自 chipmunk 的 CMakefile 后,它似乎找不到静态库(我在 Linux 顺便说一句
  3. 如果我构建了静态库,我可以从 Chimmunk 中删除所有 src 内容并只保留标头吗?

我试图找到花栗鼠静态库没有成功


add_subdirectory(chipmunk)
find_package(SDL2 REQUIRED)
find_library(CHIPMUNK_LIB chipmunk_static)
message(${CHIPMUNK_LIB})

【问题讨论】:

  • 问题帖中有几个问题,一个都不清楚。 ... it seems it cannot found the static library - 网上有很多关于链接外部库的信息,包括关于 Stack Overflow 的问题。您到底尝试了哪些确切的错误消息(或其他错误描述)?

标签: makefile cmake sdl chipmunk


【解决方案1】:

因此,使用 CMake,当您“找到”一个库时,它会查找已安装的库,而不是由子项目构建的库。因此,您应该在某处有一行引用包含 Chipmunk 的目录。在我的项目中:

add_subdirectory(external/Chipmunk2D)

然后,当您构建可执行文件(或库,等等)时,您可以按名称列出由子项目构建的库。就我而言,glfw、chipmunk_static 和 enet 都是由 CMake 在子项目中构建的:

target_link_libraries(my_executable
    ${OPENGL_LIBRARIES}
    glfw
    chipmunk_static
    enet
)

【讨论】:

  • 建库后有什么理由保留项目中的源代码吗?
  • @Gavriil,迟到的答案,但是您是否想“在构建库后保留项目中的源代码”取决于您要如何处理依赖项。根据 slembcke 的回答,他似乎主张将 Chipmunk2D 源文件“视为您自己的文件”,但您不必自己为这些文件编写 CMakeList.txt 文件,因为它已经存在。如果您使用 Git,您可以将 Chipmunk2D 作为子模块。
  • 感谢您的回答。作为记录:我花了一段时间才明白“chipmunk_static”不是一个只适用于某些特定项目的任意名称。假设 Chipmunk2D GitHub 目录的内容存在于源代码树中的同名目录下,“chipmunk_static”是 Chipmunk2D 静态库的 CMake 目标名称。这就是为什么简单的target_link_libraries 可以正常工作的原因。特别是,不需要任何target_link_directories 来工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多