web-dev-qa-db-ja.com

Clang stdio、hファイルが見つかりません

Visual Studioでclangをインストールしてから、ドキュメントに記載されているように、強調表示されたプロジェクトをビルドしました。

enter image description here

ビルドは成功しましたが、これを試してみると:

clang -cc1 -analyze -analyzer-checker=core.DivideZero test.c

それは言う:

test.c:1:10: fatal error: 'stdio.h' file not found
#include <stdio.h>
         ^~~~~~~~~
1 error generated.

私は多くの提案を試みましたが、何もうまくいきませんでした。

しかし、私がこのようなことをすると、それは機能します

clang --analyze text.c

これが利用可能なすべてのチェッカーを使用するかどうかはわかりません。私は自分のチェッカーを書いてそれをテストする必要があります...

何か案は?

clang --versionの出力

clang version 7.0.0 (trunk 322536)
Target: i686-pc-windows-msvc
Thread model: posix
InstalledDir: C:\path\build\Debug\bin
4
UnguruBulan

はい、私には考えがあります。 -cc1または<stdio.h>を削除します。 clang FAQ によるとこれはあなたのエラーです。それはあなたの正確な例を与えて、非常に明確に述べています:

$ clang -cc1 hello.c
hello.c:1:10: fatal error: 'stdio.h' file not found
#include <stdio.h>
         ^
1 error generated.

読み進めると、他の代替ソリューションと役立つ説明が得られます。使用するテクノロジーのマニュアルを読むのはプログラマーとしての私たちの仕事なので、必ず全体を読む必要があります。

clang -cc1はフロントエンド、clangはドライバーです。ドライバは、システムに適したオプションを使用してフロントエンドを呼び出します。これらのオプションを表示するには、次を実行します。

$ clang -### -c hello.c

一部のclangコマンドラインオプションはドライバーのみのオプションであり、一部はフロントエンドのみのオプションです。フロントエンドのみのオプションは、clang開発者のみが使用することを目的としています。 clang -cc1オプションは安定しているとは限らないため、ユーザーは-cc1を直接実行しないでください。

フロントエンドのみのオプション(「-cc1オプション」)、たとえば-ast-dumpを使用する場合は、ドライバーによって生成されたclang -cc1行を取得し、オプションを追加する必要があります。あなたが必要です。または、clang -Xclang <option> ...を実行して、ドライバーに<option>clang -cc1に強制的に渡すこともできます。

強調は私のものです。これにより、必要なことを実行するための十分なガイダンスが得られます。

2
autistic