我计划用C++编写一个小的2D游戏引擎,使用SDL2进行渲染。我想为SDL2写一个包装器库,让它更容易为我自己使用。如何使用CMake将此库与SDL2链接?
发布于 2021-01-31 00:04:49
因此,您希望您的应用程序链接到包装库,如下所示:
Application --> Wrapper lib --> Actual lib具体步骤如下:
1.找到实际的库
尝试使用最简单的方法查找系统上已安装的库:
find_package(SDL2 REQUIRED)对于较新的cmake版本来说,这应该足够了。对于旧版本-请参阅有关如何使用CMake查找SDL2的链接问题。
2.为该库创建伪目标
第一步只剩下cmake变量SDL2_INCLUDE_DIRS和SDL2_LIBRARIES。尽管可以按原样使用它们,但将它们组合到一个目标中,并通过CMakeLists.txt文件的其余部分使用该目标会方便得多。为外部库创建一个接口目标比创建一个导入的目标要简单一些,因此:
add_library (external.sdl2 INTERFACE)
target_include_directories(external.sdl2 INTERFACE ${SDL2_INCLUDE_DIRS})
target_link_libraries (external.sdl2 INTERFACE ${SDL2_LIBRARIES})现在,每次链接到目标external.sdl2时,都会自动包含目录和实际的库。
3.定义包装库的目标
add_library(my_wrapper STATIC
my_wrapper.cpp
)
target_link_libraries(my_wrapper
external.sdl2
)注意:您不再需要显式的include_directories。
4.定义主要可执行文件的目标
add_executable(my_game
my_game.cpp
)
target_link_libraries(my_game
my_wrapper
)同样,您不必在目标库中提及SDL2,也不必包括目录;它们将被隐式添加,因为my_wrapper目标使用它。
附注:既然这是一个C++项目,为什么不使用SDL2PP,SDL2上的C++包装器呢?
https://stackoverflow.com/questions/65968389
复制相似问题