不知道为什么这个makefile报错

问题描述 投票:0回答:1

我有一个

test.c
文件,基本内容:

#include <stdio.h>

int main(void) {
    printf("hi\n");
    return 0;
}

我正在尝试创建一个 makefile 来标识操作系统并将代码编译到名为

bin
的目录中。这是生成文件:

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)
    @"C:\Program Files (x86)\Intel\oneAPI\setvars.bat" intel64
endif
    @if not exist "bin\" mkdir bin
    @$(CCwin) $(files) -o bin\$(name)
else
    @mkdir -p bin
    @$(CCunix) $(files) -o bin/$(name)
endif

clean_bin:
ifeq ($(OSFLAG), win)
    @del /Q bin
else
    @rm -r bin
endif

当我在

make
上运行
windows
时,出现以下错误:

process_begin: CreateProcess(NULL, icx test.c -o bin\test, ...) failed.
make (e=2): The system cannot find the file specified.
make: *** [makefile:18: all] Error 2

我不知道为什么它停在第 19 行。可能有什么问题吗?

提前致谢。

makefile
1个回答
0
投票

错误信息“make (e=2): The system cannot find the file specified”说明make找不到icx编译器。

此错误的一个可能原因是 icx 编译器未安装或不在 Windows 机器上的系统 PATH 中。您可以通过从 makefile 外部的命令行运行 icx 来验证这一点。

如果未安装 icx,您可以尝试安装它或使用系统上安装的不同编译器,例如 Microsoft 的 Visual C++ 编译器 (cl.exe)。

如果安装了 icx 但不在系统 PATH 中,您可以将其目录添加到 PATH 环境变量或修改 makefile 以使用 icx 编译器可执行文件的完整路径。

如果您决定使用不同的编译器,您还需要修改 makefile 以使用适合该编译器的编译器名称和编译器选项。

请注意,makefile 假定英特尔 C++ 编译器的 setvars.bat 脚本安装在默认位置。如果它安装在不同的位置,您需要修改 makefile 以使用正确的路径。

© www.soinside.com 2019 - 2024. All rights reserved.