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

从IBM GitHub安装DOOPL时遇Makefile执行错误求助

在Windows上编译DOOPL时遇到Shell语法错误的解决方案

问题重现

编译DOOPL时触发以下错误:

make[1]: Entering directory 'C:/.../Documents/DOOPL/doopl-master/doopl-master/generate/x64_win' if [ ! -d 2211 ]; then mkdir 2211; fi ! était inattendu. make[1]: *** [makefile.build:76: generate] Error 255 make[1]: Leaving directory 'C:/.../Documents/DOOPL/doopl-master/doopl-master/generate/x64_win' make: *** [../makefile:28: build] Error 2

当前使用的Makefile内容:

########################################
COS_VERSION?= 2211
COSDIR?=C:/Users/DM9070/Desktop/IBM/ILOG/CPLEX_Studio2211
PYTHON_TARGET?= 3.8
PYTHON_HOME?= C:/ProgramData/Anaconda3
SWIGDIR?= C:/Users/DM9070/Documents/DOOPL/swigwin-4.1.1
#########################################


OPLDIR =C:/Users/DM9070/Desktop/IBM/ILOG/CPLEX_Studio2211/opl
LD_LIBRARY_PATH=$(OPLDIR)/bin/x86-64_linux
DYLD_LIBRARY_PATH=$(OPLDIR)/bin/x86-64_osx
#PATH=$(OPLDIR)/bin/x64_win64


all: build

clean:
    @echo ================================================
    @echo = Cleaning $(COS_VERSION)/$(PYTHON_TARGET)
    @echo ================================================
    $(MAKE) -f makefile.build COS_VERSION=$(COS_VERSION) PYTHON_TARGET=$(PYTHON_TARGET) OPLDIR=$(OPLDIR) clean

build:
    @echo ================================================
    @echo = Building for $(COS_VERSION)/$(PYTHON_TARGET)
    @echo ================================================
    $(MAKE) -f makefile.build COS_VERSION=$(COS_VERSION) PYTHON_HOME=$(PYTHON_HOME) SWIGDIR=$(SWIGDIR) PYTHON_TARGET=$(PYTHON_TARGET) OPLDIR=$(OPLDIR) install_in_src all
    @echo ================================================
    @echo = Sanity test run for $(COS_VERSION)/$(PYTHON_TARGET)
    @echo ================================================
    $(MAKE) -f makefile.build COS_VERSION=$(COS_VERSION) PYTHON_HOME=$(PYTHON_HOME) PYTHON_TARGET=$(PYTHON_TARGET) OPLDIR=$(OPLDIR) LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) DYLD_LIBRARY_PATH=$(DYLD_LIBRARY_PATH) test

错误原因

错误信息里的! était inattendu是法语“意外的!”,本质是Windows自带的CMD Shell不兼容类Unix的Bash语法。编译脚本里的if [ ! -d 2211 ]; then mkdir 2211; fi是Bash风格的判断语句,CMD无法识别[、!这类语法,导致执行失败。

解决方案

1. 用类Unix环境执行编译

最稳妥的方式是在Windows上安装MSYS2或Cygwin,它们提供完整的Bash环境和GNU工具链:

  • 安装MSYS2后,打开对应的终端(比如MSYS2 MinGW 64-bit)
  • 在终端中切换到DOOPL源码目录,运行make命令

2. 修改makefile.build为Windows兼容格式

找到makefile.build第76行的generate目标,把Bash风格的判断语句替换为CMD兼容写法:
原语句:

if [ ! -d $(COS_VERSION) ]; then mkdir $(COS_VERSION); fi

替换为:

if not exist $(COS_VERSION) mkdir $(COS_VERSION)

3. 调整Makefile中的Windows环境变量

Windows不需要LD_LIBRARY_PATH或DYLD_LIBRARY_PATH,需把OPL的bin目录加入系统PATH:
取消Makefile中#PATH=$(OPLDIR)/bin/x64_win64的注释,修改为:

PATH=$(OPLDIR)/bin/x64_win64;$(PATH)

4. 确保路径格式正确

所有路径统一使用正斜杠(/),或双反斜杠(\\),避免CMD解析路径时出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 10:43:21