gpt4 book ai didi

c++ - 在 CMake 中导入静态第 3 方 (SDL2) 库

转载 作者:太空宇宙 更新时间:2023-11-04 13:04:28 25 4
gpt4 key购买 nike

我正在尝试使用 CMake (3.5.2) 启动一个项目。对于我的项目,我想使用 SDL2。这是到目前为止的文件夹层次结构。

PROJECT
├── Applications
├── External
│   └── SDL2
├── Games
├── Libraries
│ └── Rendering
└── Tests
└── Testen

我正在处理的渲染库依赖于 SDL2,而 Testen 依赖于 SDL2。我将 SDL2 构建为每个平台的静态库,在我尝试将 SDL2 导入我的 CMake 项目之前,我有一个基于控制台的测试应用程序处于工作状态。在尝试添加它之后,我被难住了......

:-1: error: No rule to make target /**FULL_PATH_TO_PROJECT_DIR**/External/SDL2/SDL2-2.0.5/Xcode/SDL/Build/libSDL2.a, needed by `Tests/Testen/Testen.app/Contents/MacOS/Testen'.  Stop.

这是 SDL2 的 CMake 列表

SET (SDL2_NAME "External::SDL2")
SET (SDL2_LIBRARY "***ABSOLUTE_PATH_TO_LIBRARY***")
SET (SDL2_LIBRARY_DIR "***ABSOLUTE_PATH_TO_LIBRARY_DIR***")
SET (SDL2_INCLUDE_DIR "***ABSOLUTE_PATH_TO_SDL2_INCLUDES***")

LINK_DIRECTORIES( "${SDL2_LIBRARY_DIR}" )

ADD_LIBRARY (
${SDL2_NAME}

STATIC
IMPORTED
GLOBAL
)

SET_TARGET_PROPERTIES (
${SDL2_NAME}

PROPERTIES

IMPORTED_LOCATION ${SDL2_LIBRARY}
LINK_DIRECTORIES ${SDL2_LIBRARY_DIR}
INTERFACE_INCLUDE_DIRECTORIES ${SDL2_INCLUDE_DIR}
)

这是渲染包装器库的 CMake 列表

SET ( LIBRARY_NAME Rendering)

SET (
HEADERS

Header1.h
Header2.h
Header3.h
Header4.h
)


SET (
SOURCE

Source1.cpp
Source2.cpp
Source3.cpp
Source4.cpp
)


SET (
LIB_DEPENDENCIES

SomeOtherLibraryWrittenByMe
)

LINK_DIRECTORIES( "${***ABSOLUTE_PATH_TO_SDL2_LIBRARY_DIR***}" )

ADD_LIBRARY (
${LIBRARY_NAME}

${SOURCE}
${HEADERS}
)

ADD_DEPENDENCIES (
${LIBRARY_NAME}

${LIB_DEPENDENCIES}
)

TARGET_LINK_LIBRARIES (
${LIBRARY_NAME}

${LIB_DEPENDENCIES}
External::SDL2
)

这是 Testen(我的测试应用程序)的 CMake 列表

SET ( APP_NAME Testen)
SET ( APP_HEADERS ***SAME_STYLE_AS_RENDERING***)
SET ( APP_SOURCE ***SAME_STYLE_AS_RENDERING***)

LINK_DIRECTORIES( "${***ABSOLUTE_PATH_TO_SDL2_LIBRARY_DIR***}" )

# Here we put together our executable
ADD_EXECUTABLE (
${APP_NAME}

MACOSX_BUNDLE # Because I'm on a mac right now

${APP_HEADERS}
${APP_SOURCE}
)


ADD_DEPENDENCIES (
${APP_NAME}

Rendering
)

TARGET_LINK_LIBRARIES (
${APP_NAME}

Rendering
)

我的项目的目标是更多地了解编程的不同方面。也就是说,我正在积极避免使用像 FindSDL2.cmake 这样的辅助脚本。和其他此类模块。也许这可能是我解决问题所需的工具,但我想确切地知道它在做什么,如果我试图向我的项目添加一些没有 F​​ind.cmake 脚本的东西,我不是被阻止。

最佳答案

我很不好意思地说我的问题是 libSDL2.a 路径中的拼写错误造成的。不过,@Tsyvarev 确实提出了一个很好的观点,即我应该将 SDL2 链接为 PRIVATE。我目前正在尝试解决 SDL2 中与库中对 MACOSX 框架函数的函数调用相关的链接器错误。尽管我会尝试调试一段时间,但我也可能会发布一个问题。

感谢所有想到这个的人!特别感谢@Tsyvarev :)

编辑 - 我通过将框架链接到我的可执行文件来解决链接器错误。一切恢复原状

关于c++ - 在 CMake 中导入静态第 3 方 (SDL2) 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43035321/

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