2.unbutu下使用cmake管理引用SDL相关库项目

本文介绍了一种使用CMake构建的SDL2项目结构,包括项目目录布局、CMakeLists.txt配置,以及如何通过FindSDL2*.cmake模块查找和链接SDL2库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

个人推荐,项目目录如下较好

build:用来存放cmake的缓存文件及make编译后的中间文件

Classes:存放主项目文件

cmake:存放各种查找SDL相关头文件和库文件路径模块

Resources:存放资源文件

SDL_Engine:存放个人动态库的相关文件

在这里,我是把源文件分成两部分,SDL_Engine目录存放的是游戏框架;而Classes则存放的是基于SDL_Engine之上的文件。

另外,FIndSDL2*.cmake中是没有FindSDL2_mixer.cmake和FindSDL2_gfx.cmake文件的,不过也很简单,简单地修改以下其他的文件即可。

对应的FindSDL2*.cmake文件如下

https://github.com/LuckDog555/SDLProject_cmake/blob/master/cmake.tar.gz

项目主文件夹下的CMakeLists.txt负责管理调用Classes和SDL_Engine下的CMakeLists.txt,还有就是负责统筹一些全局的规划,比如是否可调试、发现公用模块等。

以我的项目为例:

cmake_minimum_required(VERSION 3.10)

project(main)

#调试 Debug Release
set(CMAKE_BUILD_TYPE "Debug")

SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

#设置模块的搜索路径
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
#找到SDL2相关库 如果未找到,则失败
find_package(SDL2 REQUIRED)
find_package(SDL2_image REQUIRED)
find_package(SDL2_ttf REQUIRED)
find_package(SDL2_mixer REQUIRED)
find_package(SDL2_gfx REQUIRED)

#add_subdirectory(SDL_Engine)
add_subdirectory(Classes)

在主CMakeLists.txt下,我设置本项目可以通过gdb进行调试,同时还设置了模块(Find*.cmake)的搜索路径,并去寻找SDL2相关库的头文件和库文件路径。一般情况下,如果采用默认安装,那么以上5个的头文件目录应该是相同的,而库文件的路径也是相同的;这里为了可扩展性,所以调用了上面的语句。因为SDL_Engine目前是空的,所以注释了add_subdirectory(SDL_Engine)

这样会发现和以前的不同点,上一节是把find_package()语句放在了Classes目录下的CMakeLists.txt内,而这里放在了项目根路径下的CMakeLists.txt中,这么做是因为Classes和SDL_Engine下的文件都需要引用头文件。

Classes/CMakeLists.txt


#添加对应的头文件搜索目录
include_directories(${SDL2_INCLUDE_DIR})
#生成可执行文件
add_executable(main main.cpp)
#链接对应的函数库
target_link_libraries(main 
	${SDL2_LIBRARY}
	${SDL2_IMAGE_LIBRARY}
	${SDL2_TTF_LIBRARY})
#设置生成路径在源路径下
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR})

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值