Skip to content

无法发现编译器内部的IncludePath,提示fatal error: 'iostream' file not found #7020

@EnochxynL

Description

@EnochxynL

Xmake 版本

3.0.4

操作系统版本和架构

Windows 11 version 24H2

描述问题

一个xmake create hello项目,没有任何改动。在使用xmake时,无法include文件。但是在直接执行命令时候能找到include文件。

工具链采用xmake+clang+msvc
环境变量均已配置,INCLUDE环境变量如下

C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.44.35207\include
C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\shared
C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\ucrt
C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um
C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\winrt

LIB环境变量如下

C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.44.35207\lib\x64
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\x64
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\ucrt\x64

下面是我的clang++会包含的路径

PS C:\Users\enoch\Desktop\hello> clang++ -E -x c++ - -v
clang version 21.1.0
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Program Files\LLVM\bin
 (in-process)
 "C:\\Program Files\\LLVM\\bin\\clang++.exe" -cc1 -triple x86_64-pc-windows-msvc19.33.0 -E -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name - -mrelocation-model pic -pic-level 2 -mframe-pointer=none -relaxed-aliasing -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -fms-volatile -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic "-fdebug-compilation-dir=C:\\Users\\enoch\\Desktop\\hello" -v "-fcoverage-compilation-dir=C:\\Users\\enoch\\Desktop\\hello" -resource-dir "C:\\Program Files\\LLVM\\lib\\clang\\21" -internal-isystem "C:\\Program Files\\LLVM\\lib\\clang\\21\\include" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.22621.0\\ucrt" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22621.0\\\\um" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22621.0\\\\shared" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22621.0\\\\winrt" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22621.0\\\\cppwinrt" -internal-isystem "C:\\Program Files (x86)\\Microsoft Visual Studio\\18\\BuildTools\\VC\\Tools\\MSVC\\14.44.35207\\include" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\shared" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\ucrt" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\um" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\winrt" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.22621.0\\ucrt" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22621.0\\\\um" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22621.0\\\\shared" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22621.0\\\\winrt" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22621.0\\\\cppwinrt" -fdeprecated-macro -ferror-limit 19 -fmessage-length=120 -fno-use-cxa-atexit -fms-extensions -fms-compatibility -fms-compatibility-version=19.33 -std=c++14 -fskip-odr-check-in-gmf -fdelayed-template-parsing -fcxx-exceptions -fexceptions -fcolor-diagnostics -faddrsig -o - -x c++ -
clang -cc1 version 21.1.0 based upon LLVM 21.1.0 default target x86_64-pc-windows-msvc
ignoring duplicate directory "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\shared"
ignoring duplicate directory "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\ucrt"
ignoring duplicate directory "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um"
ignoring duplicate directory "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\winrt"
ignoring duplicate directory "C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt"
ignoring duplicate directory "C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um"
ignoring duplicate directory "C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\shared"
ignoring duplicate directory "C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\winrt"
ignoring duplicate directory "C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\cppwinrt"
#include "..." search starts here:
#include <...> search starts here:
 C:\Program Files\LLVM\lib\clang\21\include
 C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt
 C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um
 C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\shared
 C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\winrt
 C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\cppwinrt
 C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.44.35207\include
End of search list.

期待的结果

错误的结果

使用MSVC编译的错误情况

PS C:\Users\enoch\Desktop\hello> xmake
[ 47%]: cache compiling.release src\main.cpp
error: src\main.cpp:1:10: fatal error: 'iostream' file not found
    1 | #include <iostream>
      |          ^~~~~~~~~~
1 error generated.
  > in src\main.cpp

把工具链切换到Clang

PS C:\Users\enoch\Desktop\hello> xmake f --toolchain=clang -c
checking for platform ... windows
checking for architecture ... x64
checking for LLVM Clang C/C++ Compiler (x64) ... ok
checking for Microsoft Visual Studio (x64) version ... 2026

用Clang编译的错误情况

PS C:\Users\enoch\Desktop\hello> xmake --verbose
checking for C:\Program Files\LLVM\bin\clang++ ... c:\program files\llvm\bin\clang++.exe
checking for flags (-fvisibility-inlines-hidden) ... ok
checking for flags (-O3) ... ok
checking for flags (-DNDEBUG) ... ok
[ 47%]: cache compiling.release src\main.cpp
"C:\\Program Files\\LLVM\\bin\\clang++" -c -Qunused-arguments -m64 --target=x86_64-windows-msvc -fvisibility=hidden -fvisibility-inlines-hidden -O3 -fexceptions -fcxx-exceptions -DNDEBUG -o build\.objs\hello\windows\x64\release\src\main.cpp.obj src\main.cpp
checking for flags (-MMD -MF) ... ok
checking for flags (-fdiagnostics-color=always) ... ok
checking for flags (-Wno-gnu-line-marker -Werror) ... ok
error: src\main.cpp:1:10: fatal error: 'iostream' file not found
    1 | #include <iostream>
      |          ^~~~~~~~~~
1 error generated.

期待的结果

单独运行clang++命令,却能正确编译

PS C:\Users\enoch\Desktop\hello> clang++ -c -Qunused-arguments -m64 --target=x86_64-windows-msvc -fvisibility=hidden -fvisibility-inlines-hidden -O3 -fexceptions -fcxx-exceptions -DNDEBUG -o build\.objs\hello\windows\x64\release\src\main.cpp.obj src\main.cpp

同理,用MSVC的cl.exe才能得到正常结果

PS C:\Users\enoch\Desktop\hello> xmake f --toolchain=msvc -c
checking for platform ... windows
checking for architecture ... x64
checking for Microsoft C/C++ Compiler (x64) ... ok
checking for Microsoft Visual Studio (x64) version ... 2026
PS C:\Users\enoch\Desktop\hello> xmake --verbose
checking for C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.44.35207\bin\Hostx64\x64\cl.exe ... c:\program files (x86)\microsoft visual studio\18\buildtools\vc\tools\msvc\14.44.35207\bin\hostx64\x64\cl.exe
checking for flags (-O2) ... ok
checking for flags (-DNDEBUG) ... ok
[ 47%]: compiling.release src\main.cpp
"C:\\Program Files (x86)\\Microsoft Visual Studio\\18\\BuildTools\\VC\\Tools\\MSVC\\14.44.35207\\bin\\Hostx64\\x64\\cl.exe" -c -nologo -MD -O2 /EHsc -DNDEBUG -Fobuild\.objs\hello\windows\x64\release\src\main.cpp.obj src\main.cpp
checking for flags (cl_sourceDependencies) ... ok
error: main.cpp
src\main.cpp(1): fatal error C1083: Cannot open include file: 'iostream': No such file or directory

PS C:\Users\enoch\Desktop\hello> cl.exe -c -nologo -MD -O2 /EHsc -DNDEBUG -Fobuild\.objs\hello\windows\x64\release\src\main.cpp.obj src\main.cpp
cl : Command line warning D9027 : source file '.objs\hello\windows\x64\release\src\main.cpp.obj' ignored
main.cpp
PS C:\Users\enoch\Desktop\hello> cl.exe -c -nologo -MD -O2 /EHsc -DNDEBUG -Fo"build\.objs\hello\windows\x64\release\src\main.cpp.obj" src\main.cpp
main.cpp

工程配置

没有任何改动

add_rules("mode.debug", "mode.release")

target("hello")
    set_kind("binary")
    add_files("src/*.cpp")

附加信息和错误日志

PS C:\Users\enoch\Desktop\hello> xmake f --toolchain=clang -cvD
checking for platform ... windows
checking for architecture ... x64
checking for clang ... C:\Program Files\LLVM\bin\clang
checking for LLVM Clang C/C++ Compiler (x64) ... ok
checking for Microsoft Visual Studio (x64) version ... 2026
checking for clang++ ... C:\Program Files\LLVM\bin\clang++
checking for the c++ compiler (cxx) ... clang++
checking for clang++ ... C:\Program Files\LLVM\bin\clang++
checking for the linker (ld) ... clang++
checking for clang++ ... C:\Program Files\LLVM\bin\clang++
checking for the shared library linker (sh) ... clang++
configure
{
    vs = 2026
    kind = static
    host = windows
    ndk_stdcxx = true
    plat = windows
    clean = true
    toolchain = clang
    mode = release
    network = public
    arch = x64
    ccache = true
    theme = default
    proxy_pac = pac.lua
    builddir = build
}
PS C:\Users\enoch\Desktop\hello> xmake -vD
checking for C:\Program Files\LLVM\bin\clang++ ... c:\program files\llvm\bin\clang++.exe
checking for flags (-fvisibility-inlines-hidden) ... ok
> clang++.exe "-fvisibility-inlines-hidden" "-Qunused-arguments" "-m64" "--target=x86_64-windows-msvc"
checking for flags (-O3) ... ok
> clang++.exe "-O3" "-Qunused-arguments" "-m64" "--target=x86_64-windows-msvc"
checking for flags (-DNDEBUG) ... ok
> clang++.exe "-DNDEBUG" "-Qunused-arguments" "-m64" "--target=x86_64-windows-msvc"
[ 47%]: cache compiling.release src\main.cpp
"C:\\Program Files\\LLVM\\bin\\clang++" -c -Qunused-arguments -m64 --target=x86_64-windows-msvc -fvisibility=hidden -fvisibility-inlines-hidden -O3 -fexceptions -fcxx-exceptions -DNDEBUG -o build\.objs\hello\windows\x64\release\src\main.cpp.obj src\main.cpp
checking for flags (-MMD -MF) ... ok
> clang++.exe "-MMD" "-MF" "C:\Users\enoch\AppData\Local\Temp\.xmake\251113\_7471e080d3bd70eb8019b1184c222ae2" "-Qunused-arguments" "-m64" "--target=x86_64-windows-msvc"
checking for flags (-fdiagnostics-color=always) ... ok
> clang++.exe "-fdiagnostics-color=always" "-Qunused-arguments" "-m64" "--target=x86_64-windows-msvc"
checking for flags (-Wno-gnu-line-marker -Werror) ... ok
> clang++.exe "-Wno-gnu-line-marker" "-Werror" "-Qunused-arguments" "-m64" "--target=x86_64-windows-msvc"
error: @programdir\core\main.lua:272: @programdir\actions\build\main.lua:160: @programdir\modules\async\runjobs.lua:390: @programdir\modules\private\action\build\object.lua:100: @programdir\modules\core\tools\gcc.lua:1047: src\main.cpp:1:10: fatal error: 'iostream' file not found
    1 | #include <iostream>
      |          ^~~~~~~~~~
1 error generated.
stack traceback:
    [C]: in function 'error'
    [@programdir\core\base\os.lua:1093]:
    [@programdir\modules\core\tools\gcc.lua:1047]: in function 'catch'
    [@programdir\core\sandbox\modules\try.lua:123]: in function 'try'
    [@programdir\modules\core\tools\gcc.lua:988]:
    [C]: in function 'xpcall'
    [@programdir\core\base\utils.lua:246]:
    [@programdir\core\tool\compiler.lua:285]: in function 'compile'
    [@programdir\modules\private\action\build\object.lua:100]: in function 'script'
    [@programdir\modules\private\action\build\object.lua:131]: in function 'build_object'
    [@programdir\modules\private\action\build\object.lua:171]: in function 'job_func'
    [@programdir\modules\async\runjobs.lua:206]:
    [C]: in function 'xpcall'
    [@programdir\core\base\utils.lua:246]: in function 'trycall'
    [@programdir\core\sandbox\modules\try.lua:117]: in function 'try'
    [@programdir\modules\async\runjobs.lua:190]: in function 'cotask'
    [@programdir\core\base\scheduler.lua:514]:

stack traceback:
        [C]: in function 'error'
        @programdir\core\base\os.lua:1093: in function 'base/os.raiselevel'
        (...tail calls...)
        @programdir\core\main.lua:272: in upvalue 'cotask'
        @programdir\core\base\scheduler.lua:514: in function <@programdir\core\base\scheduler.lua:507>

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions