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

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

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})

猜你喜欢

转载自blog.csdn.net/bull521/article/details/82498834