CMake配置本地include/lib目录引入raylib的技术咨询
先贴适配你目录结构的完整CMakeLists.txt,再逐个拆解每个指令的作用:
# 指定CMake最低版本要求 cmake_minimum_required(VERSION 3.10) # 定义项目名称与使用的编程语言 project(MyRaylibProject C) # 设置C语言标准版本 set(CMAKE_C_STANDARD 99) # 添加本地头文件搜索路径 include_directories(${PROJECT_SOURCE_DIR}/include) # 添加本地库文件搜索路径 link_directories(${PROJECT_SOURCE_DIR}/lib) # 自动收集src目录下所有C源文件 file(GLOB_RECURSE SOURCES ${PROJECT_SOURCE_DIR}/src/*.c) # 生成可执行文件 add_executable(${PROJECT_NAME} ${SOURCES}) # 链接raylib及其他需要的库 target_link_libraries(${PROJECT_NAME} raylib) # Windows系统下raylib依赖的系统库链接 if(WIN32) target_link_libraries(${PROJECT_NAME} winmm gdi32 opengl32) endif()
指令逐行解释
1. cmake_minimum_required(VERSION 3.10)
指定运行该配置所需的最低CMake版本,避免因版本过低导致指令不兼容。3.10版本对C语言项目的支持足够完善,适配绝大多数开发环境。
2. project(MyRaylibProject C)
定义项目名称(替换成你的实际项目名),同时声明项目基于C语言开发。CMake会自动生成${PROJECT_SOURCE_DIR}变量,指向项目根目录的绝对路径,后续指令可以用这个变量统一引用目录。
3. set(CMAKE_C_STANDARD 99)
指定编译时遵循的C语言标准,raylib官方推荐使用C99,确保代码能兼容raylib的语法特性。如果你的项目使用C11/C17,直接修改数字即可。
4. include_directories(${PROJECT_SOURCE_DIR}/include)
告诉CMake去指定目录搜索头文件(.h)。这里指向你本地的include目录,不管是raylib的头文件还是你自己的自定义头文件,只要放在这个目录下,编译时就能被找到。
5. link_directories(${PROJECT_SOURCE_DIR}/lib)
指定库文件的搜索路径,CMake会在这里查找你需要链接的静态库(如libraylib.a)或动态库(如raylib.dll)。
6. file(GLOB_RECURSE SOURCES ${PROJECT_SOURCE_DIR}/src/*.c)
自动递归收集src目录下所有.c源文件,并存入SOURCES变量中。如果你的src有子目录,也会被一并搜索。如果不想自动收集,也可以手动列出源文件,比如set(SOURCES src/main.c src/utils.c)。
7. add_executable(${PROJECT_NAME} ${SOURCES})
根据SOURCES变量中的源文件,生成一个与项目同名的可执行文件。
8. target_link_libraries(${PROJECT_NAME} raylib)
将raylib库链接到你的可执行文件上。如果还有其他需要链接的自定义库(比如libmylib.a),直接在后面追加即可:target_link_libraries(${PROJECT_NAME} raylib mylib)。
9. Windows系统额外配置
raylib在Windows平台依赖winmm(多媒体控制)、gdi32(图形设备接口)、opengl32(OpenGL支持)这几个系统库,通过if(WIN32)判断系统后添加链接,避免运行时出现缺失依赖的错误。
注意事项
- 确保raylib的头文件正确放入
include目录,即使头文件在子目录(如include/raylib/raylib.h)也能被正常搜索到。 - 库文件要与你的系统架构匹配:64位系统用64位raylib库,32位系统用32位库,否则会出现编译或运行错误。
- 如果使用动态库(如
raylib.dll),编译完成后需要将dll文件复制到可执行文件所在的目录,否则程序运行时会找不到库。
内容的提问来源于stack exchange,提问作者Alfred Jijo

