clang on windows (installeret via scoop) kan ikke finde overskrifter

Indlæg af Hanne Mølgaard Plasc

Problem



Forsøger at kompilere en simpel hej verden eksempel ved hjælp af clang på windows fejler og jeg ved ikke hvorfor, da kommandoen nedenfor viser steder, der indeholder mulige overskrifter.


C:UserspeterDownloads>clang-cl -v hello.c
clang version 3.9.1 (branches/release\_39)
Target: x86\_64-pc-windows-msvc
Thread model: posix
InstalledDir: C:Userspeterscoopappsllvmcurrentin
"C:\Users\peter\scoop\apps\llvm\current\bin\clang-cl.exe" -cc1 -triple x86\_64-pc-windows-msvc19.0.24215 -emit-obj -mrelax-all mincremental-linker-compatible -disable-free -disable-llvm-verifier -discard-value-names -main-file-name hello.c -mrelocation-model pic -pic-level 2 -mthread-model posix -relaxed-aliasing -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -target-cpu x86-64 -D\_MT -flto-visibility-public-std --dependent-lib=libcmt --dependent-lib=oldnames -stack-protector 2 -fms-volatile -fdiagnostics-format msvc -momit-leaf-frame-pointer -v -dwarf-column-info -debugger-tuning=gdb -resource-dir "C:\Users\peter\scoop\apps\llvm\current\bin\..\lib\clang\3.9.1" -internal-isystem "C:\Users\peter\scoop\apps\llvm\current\bin\..\lib\clang\3.9.1\include" -internal-isystem "F:\visualstudio2015\VC\include" -internal-isystem "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\" -internal-isystem "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\" -internal-isystem "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\" -fdebug-compilation-dir "C:\Users\peter\Downloads" -ferror-limit 19 -fmessage-length 120 -fms-extensions -fms-compatibility -fms-compatibility-version=19.0.24215 -fdelayed-template-parsing -fobjc-runtime=gcc -fdiagnostics-show-option -fcolor-diagnostics -o "C:\Users\peter\AppData\Local\Temp\hello-8512ad.obj" -x c hello.c
clang -cc1 version 3.9.1 based upon LLVM 3.9.1 default target x86\_64-pc-windows-msvc
ignoring duplicate directory "C:Program Files (x86)Microsoft SDKsWindowsv8.1A"
ignoring duplicate directory "C:Program Files (x86)Microsoft SDKsWindowsv8.1A"
#include "..." search starts here:
#include <...> search starts here:
C:Userspeterscoopappsllvmcurrentin..libclang3.9.1include
F:visualstudio2015VCinclude
C:Program Files (x86)Microsoft SDKsWindowsv8.1A
End of search list.
hello.c(3,10):  fatal error: 'stdio.h' file not found
#include <stdio.h>
     ^
1 error generated.

C:UserspeterDownloads>


Som kommandoen viser, installerede jeg llvm fra scoop f.eks http://scoop.sh/og prøvede at kompilere kode ved blot at kalde clang.exe. [5]


Jeg kigger på clang på Windows - forkert hovedfil fil


og jeg kan bekræfte, at jeg ikke har en miljøvariabel, der hedder INCLUDE i enten mine brugermiljøvariabler eller mine systemmiljøvariabler


kører clang indefra 'VS2015 x64 Native Tools Command Prompt' genvej virker at arbejde (baseret på bare at køre 'clang hello.c' fra downloads folder), men hvordan bruger jeg de ændringer, som genvej gør til en øjeblikkelig kørende cmd prompt?


Grunden til at jeg ikke bruger cygwin/msys/mingw er fordi jeg tror at de er for tunge både diskret og klogt

Bedste reference


godt at besvare det spørgsmål, disse genveje kalder


"<location of visual studio install path>vcvarsall.bat" <platform you want to build for>


eller at præsentere hele kommandoen


\%comspec\% /k ""F:visualstudio2015VCvcvarsall.bat"" amd64


så hvis du vil anvende indholdet af genvejen til et aktuelt kørende kommandomiljø, udføres dette i kommandoprompten.


"F:visualstudio2015VCvcvarsall.bat" amd64


så hvordan gælder dette for clang?


godt clang-versionen du installerede har ikke overskrifterne til at kompilere et simpelt hej verden eksempel på windows. Dette skyldes, at der findes mange værktøjskæder, der kan bruges på Windows, og værktøjslinjerne ikke har en standardplacering hvor de installerer deres headers. Så clang har brug for lidt hjælp fra dem for at finde overskrifterne.


Det er her, hvor vcvarsall.bat filen kommer ind. Den leverer de nødvendige informationer til clang til at bruge de installerede msvc versionsoverskrifter og biblioteker.