将SDL3作为项目一部分构建时如何配置链接?
SDL3作为项目子模块的链接配置修正方案
你的配置存在两个核心问题:子目录处理顺序错误,以及手动指定SDL路径的冗余操作,以下是修正步骤:
1. 修正根目录CMakeLists.txt的子目录顺序
CMake按add_subdirectory的顺序处理模块,必须先构建SDL库,再构建依赖它的主程序。修改根目录App_Name/CMakeLists.txt:
cmake_minimum_required(VERSION 3.0.0) project(cmakefun VERSION 0.1.0 DESCRIPTION "Testing SDL" LANGUAGES CXX) # 先处理SDL库,再处理主程序 add_subdirectory(libs) add_subdirectory(src)
2. 简化src目录的CMakeLists.txt
SDL的官方CMake配置已经导出了SDL3目标,包含了所有必要的头文件路径和链接信息,无需手动设置路径。修改App_Name/src/CMakeLists.txt:
file(GLOB_RECURSE SOURCES *.cpp) add_executable(app ${SOURCES}) # 直接链接SDL3目标,CMake会自动处理头文件和库文件 target_link_libraries(app PRIVATE SDL3)
3. 测试SDL功能
启用main.cpp中的SDL代码,验证链接是否正常:
#include<iostream> #include"SDL3/SDL.h" int main(int argc, char const *argv[]) { std::cout << "hello world working" << std::endl; if(SDL_Init(SDL_INIT_EVERYTHING) != 0){ std::cout << "Error initializing SDL\n" << SDL_GetError() << std::endl; return 1; } SDL_Window* win = SDL_CreateWindow("Ford Galaxie Dash", 1240, 400, SDL_WINDOW_RESIZABLE); // 清理资源 if(win != nullptr){ SDL_DestroyWindow(win); } SDL_Quit(); return 0; }
构建验证
按正常流程执行CMake构建:
- 创建build目录并进入:
mkdir build && cd build - 生成构建文件:
cmake .. - 编译项目:
cmake --build .
这样就能正确链接SDL3库并运行程序了。
内容的提问来源于stack exchange,提问作者OptimizePrime
相关产品推荐
相关产品推荐

