Windows下Makefile编译报错求助:无法找到icx编译器
问题原因
在Windows环境中,Make的每一条命令都会启动独立的cmd.exe进程执行。你调用setvars.bat设置Intel oneAPI环境变量的操作,仅在它所在的临时进程内生效,后续执行icx的进程无法继承这些环境变量,因此系统找不到icx命令。
另外,执行Windows批处理脚本时必须用call命令,否则脚本执行完会直接退出当前shell,后续命令根本不会运行。
修复方案
修改Makefile中Windows分支的编译逻辑,将环境变量设置、目录创建、编译命令放到同一个shell进程里执行:
CCunix=clang CCwin = icx name=test files=$(name).c OSFLAG := ifeq ($(OS),Windows_NT) OSFLAG+=win else OSFLAG+=unix endif all: ifeq ($(OSFLAG), win) ifeq ($(CCwin), icx) @call "C:\Program Files (x86)\Intel\oneAPI\setvars.bat" intel64 && ^ if not exist "bin\" mkdir bin && ^ $(CCwin) $(files) -o bin\$(name) else @if not exist "bin\" mkdir bin @$(CCwin) $(files) -o bin\$(name) endif else @mkdir -p bin @$(CCunix) $(files) -o bin/$(name) endif clean_bin: ifeq ($(OSFLAG), win) @if exist "bin\" rmdir /S /Q bin else @rm -rf bin endif
关键修改点
- 用
call执行setvars.bat,避免批处理执行后直接退出shell - 用
&&串联所有需要同一环境的命令,并用^实现Makefile中的多行命令换行(适配Windows cmd的语法) - 清理命令中把
del /Q bin改为rmdir /S /Q bin,因为bin是目录,del仅能删除文件,rmdir才能删除目录及其中内容
内容的提问来源于stack exchange,提问作者Luguecos
相关产品推荐
相关产品推荐

