You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MXE CMake交叉编译Windows SDL程序时出现make错误如何解决?

问题原因

该错误由MXE环境下SDL2的CMake导入目标配置缺陷与CMake版本策略不兼容共同导致:

  1. 你使用的CMake版本开启了CMP0111策略检查,要求Windows平台的导入目标必须配置IMPORTED_IMPLIB(导入库)属性,但MXE提供的静态编译版SDL2没有生成该属性(静态库本身不需要导入库,属于SDL2在MXE下的配置疏漏)
  2. 配置阶段CMake判定SDL2::SDL2目标缺失必要属性,生成Makefile时会将该目标替换为无效值SDL2::SDL2-NOTFOUND,make解析该无效target时就会抛出target pattern contains no '%'的语法错误
  3. *nix原生环境下SDL2的CMake配置符合平台规则,没有导入库属性要求,因此可以正常编译。
修复方案

可任选以下任意一种方案解决:

  • 方案1:调整CMake策略跳过检查
    在CMakeLists.txt的cmake_minimum_required行之后、project行之前添加如下代码,关闭CMP0111的严格检查:
    cmake_policy(SET CMP0111 OLD)
    
  • 方案2:改用SDL2变量替代导入目标
    跳过SDL2::SDL2导入目标,直接使用find_package输出的变量完成链接,将CMakeLists.txt修改为如下内容:
    cmake_minimum_required(VERSION 3.5)
    
    project(untitled LANGUAGES CXX)
    
    set(CMAKE_CXX_STANDARD 11)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
    find_package(SDL2 REQUIRED)
    include_directories(${SDL2_INCLUDE_DIRS})
    
    add_executable(untitled main.cpp)
    target_link_libraries(untitled ${SDL2_LIBRARIES})
    
  • 方案3:重装MXE的SDL2静态包
    回到MXE源码根目录,执行如下命令重新编译安装SDL2静态版本,修复可能损坏的包配置:
    make sdl2 MXE_TARGETS=i686-w64-mingw32.static
    

内容的提问来源于stack exchange,提问作者user17041628

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:54:08