0

有没有人想出如何为 oneAPI Fortran 编译器编写构建系统?以前,我使用的是 Parallel Studio XE ifort,我设法使用这里的解决方案让它工作:

{
    "cmd": ["cmd", "/e:on", "/v:on", "/k", "ipsxe-comp-vars intel64 vs2013 && ifort ${file}"],  
    "file_regex": "^.*\\\\([0-9A-Za-z_]+\\.[A-Za-z0-9]+)\\(([0-9]+)\\):[ ]+error[ ]+#([0-9]+):[ ]+(.*)$",  
    "working_dir":"${file_path}",   
    "selector":"source.f ,source.for ,source.ftn ,source.f90 ,source.fpp ,source.i ,source.i90",
    "encoding":"cp936",
    "path":"C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2017.4.210\\windows\\bin;${path}",
    "variants":
      [  
           {  
              "name": "Run", 
              "cmd": ["cmd", "/e:on", "/v:on", "/c", "ipsxe-comp-vars intel64 vs2013 && ifort ${file} && ${file_base_name}"] 
          }  
     ]  

}

我尝试将路径更改为新路径,但它不起作用。我收到以下错误:

"ipsxe-comp-vars" is not recognized as an internal or external command,
program o executable.
4

1 回答 1

0

我找到了答案。说明如下。在此处发布工作构建系统以获取可见性。

这应该是构建系统:

{
    "cmd": ["cmd", "/e:on", "/v:on", "/S", "/k", "C:\\\"Program Files (x86)\"\\Intel\\oneAPI\\setvars.bat intel64 vs2022 && ifort ${file}"],  
    "file_regex": "^.*\\\\([0-9A-Za-z_]+\\.[A-Za-z0-9]+)\\(([0-9]+)\\):[ ]+error[ ]+#([0-9]+):[ ]+(.*)$",  
    "working_dir":"${file_path}",   
    "selector":"source.f ,source.for ,source.ftn ,source.f90 ,source.fpp ,source.i ,source.i90",
    "encoding":"cp936",
    "path":"C:\\Program Files (x86)\\Intel\\oneAPI\\compiler\\latest\\windows\\bin\\intel64;${path}",
    "variants":
      [  
           {  
              "name": "Run", 
              "cmd": ["cmd", "/e:on", "/v:on", "/s", "/c", "C:\\\"Program Files (x86)\"\\Intel\\oneAPI\\setvars.bat intel64 vs2022 && ifort ${file} && ${file_base_name}"] 
          }  
     ]  
}

为什么会出现问题

对于初学者来说,ipsxe-comp-vars 是一个批处理文件,它在运行时会设置执行英特尔编译器所需的环境变量。此文件特定于英特尔 Parallel Studio XE (IPSXE)。现在,在安装 IPSXE 时,它会将此批处理文件添加到您的 PATH 中,这意味着您可以简单地从任何目录调用 ipsxe-comp-vars 来设置所需的环境变量。

英特尔 oneAPI 有一个不同命名的文件,它本质上做同样的事情,称为 setvars.bat。该文件存储在:

C:\Program Files (x86)\Intel\oneAPI\setvars.bat

因此,起初似乎调用 ipsxe-comp-vars 失败,因为该文件的名称不同。但是,与IPSXE 对ipsxe-comp-vars 所做的不同,一个API 不会将setvars 添加到PATH,因此您不能简单地调用setvars,您必须使用完整路径。

如何解决

使用 IPSXE,您可以调用 ipsxe-comp-vars,它会运行设置环境变量的批处理文件,但使用 oneAPI,您可以将文件添加到 PATH(不推荐,因为它具有通用名称),或者使用完整的调用时的路径(同上):

C:\Program Files (x86)\Intel\oneAPI\setvars.bat

现在,因为您必须将其插入到构建系统配置中,所以您需要正确格式化它。ST 在​​ cmd.exe 中运行命令,因此您必须使用正确的选项并以 cmd 可以理解的方式格式化路径:选项(您可以通过打开 cmd 提示符,键入cmd /?并回车来获得完整列表) :

 - /e:on    Enables command extensions
 - /v:on    Enables extension of environment variables
 - /s       Modifies how the string following a /c or /k is read
 - /k       Executes the string command and continues

setvars.bat 文件的路径必须采用如下格式:

C:\\\"Program Files (x86)\"\\Intel\\oneAPI\\setvars.bat
  • 每个 \ 分隔目录都需要转义(也使用 \ )
  • 需要用双引号括起来,因为它包含一个空格。每个双引号也需要转义(再次使用 )

以下选项特定于 setvars.bat 文件:

- intel64      specifies 64-bit configuration
- vs2022       specifies Visual Studio 2022 as the developer cmd or 
               powershell version to use

最后,在当前文件上调用 ifortifort ${file}

此外,构建系统通过变体“运行”完成。此变体在编译后运行输出文件(&& ${file_base_name}),并将在 Sublime Text 3 控制台中显示输出(不接受输入,如果有人知道如何为 Fortran 设置 sublimeREPL,请告诉我)

于 2022-03-03T08:31:03.210 回答