CMake已找到SDL2_image配置文件,但无法链接该库求技术排查
SDL2_image链接失败问题解决
问题情况
安装SDL2_image后,系统生成了/usr/lib/cmake/SDL2_image/sdl2_image-config.cmake(注:原路径里的sdl2_iamge是拼写错误,实际应为sdl2_image),CMake能找到这个配置文件,但用SDL2_image_INCLUDE_DIRS和SDL2_image_LIBRARIES这类传统变量配置时,编译报错找不到SDL2_image的引用。
原CMake配置示例:
find_package(SDL2 REQUIRED) find_package(SDL2_image REQUIRED) include_directories(${SDL2_INCLUDE_DIRS} ${SDL2_image_INCLUDE_DIRS}) add_executable(${PROJECT_NAME} ${SRCS}) target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES} ${SDL2_image_LIBRARIES})
问题根源
查看提供的sdl2_image-config.cmake内容,这个配置文件采用现代CMake的目标式配置逻辑,并未定义SDL2_image_INCLUDE_DIRS、SDL2_image_LIBRARIES这类旧变量,而是创建了两个导入目标:
SDL2_image::SDL2_image:对应动态库SDL2_image::SDL2_image-static:对应静态库
这些导入目标已经封装了头文件路径、库路径以及依赖的第三方库信息,完全不需要手动用旧变量设置。
修复方案
直接改用现代CMake的目标链接方式,删掉手动指定头文件的步骤,修改后的CMakeLists.txt如下:
find_package(SDL2 REQUIRED) find_package(SDL2_image REQUIRED) add_executable(${PROJECT_NAME} ${SRCS}) # 要链接静态库的话,把SDL2_image::SDL2_image换成SDL2_image::SDL2_image-static即可 target_link_libraries(${PROJECT_NAME} PRIVATE SDL2::SDL2 SDL2_image::SDL2_image)
额外说明
SDL2_image::SDL2_image目标已经通过INTERFACE_INCLUDE_DIRECTORIES属性设置了头文件路径,所以不需要再调用include_directories。- 如果用静态库目标,它会自动处理png、jpeg等依赖库的链接,不用你手动添加。
内容的提问来源于stack exchange,提问作者clo_jur
相关产品推荐
相关产品推荐

