質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.35%

  • C

    3963questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • CMake

    78questions

    CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

clangのビルド方法がわからない

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 975

ogura87

score 96

過去の質問に対し頂いた回答について、調査中に挫折しました。
どなたか助け船頂けますと幸いです。

ロジック内の関数や関数内で使用しているグローバルなどの解析を行うプログラムを作成したいのですが。。。
https://teratail.com/questions/104700

こちらの質問の回答にある、clangコンパイラというものを使いたくて、こちらの記事にある事をやってみたいと思っています。

ClangのlibToolingでASTをダンプするツールを作ってみた
https://qiita.com/Chironian/items/6021d35bf2750341d80c

この記事に従って、clangをダウンロードしたのですが、ビルドというのがよくわかりません。

この記事にあるようにビルドしてみたのですが、それからどうしたらいいのやらという感じです。

CMakeでビルドするという事でしょうか?

【2017/12/31 補足】
つまってわからないところはこの部分です。
記事の中のこの部分です。

2.2 ここを参考にしつつ、clang / LLVMをビルド
 手順としては下記となります。
  1.MinGWとQtCreatorにパスを通しておく。
  2.ビルド用フォルダを作り、そこへ移動する
  3.構成し、ビルドし、インストールする

あ、これを書いていて思ったのですが、MinGWとQTcreaterというものがわかっていませんでした!

その下にある、

rem デバッグ・ビルドする
    mkdir build-llvm-debug
    cd build-llvm-debug
    CMake -G "MinGW Makefiles" -DCMAKE_C_FLAGS:STRING="-static -static-libgcc -static-libstdc++" -DCMAKE_CXX_FLAGS:STRING="-static -static-libgcc -static-libstdc++" -DCMAKE_CXX_FLAGS=-Og -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_INSTALL_PREFIX:PATH="../install/debug" ..\llvm\
    jom
    jom install

rem リリース・ビルドする
    mkdir build-llvm-release
    cd build-llvm-release
    CMake -G "MinGW Makefiles" -DCMAKE_C_FLAGS:STRING="-static -static-libgcc -static-libstdc++" -DCMAKE_CXX_FLAGS:STRING="-static -static-libgcc -static-libstdc++" -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH="../install/release" ..\llvm\
    jom
    jom install

の部分ですが、実行したのですが、うまくいったのかいかないのかがわからないんです。
フォルダ等はできたのですが、記事にあるようにビルドに何十分もかかるようなものではなく、一瞬で終わるので、多分失敗なのかなと。。。

MInGWとQTcreaterにパスを通すって、一体どうしたらいいのでしょう??
パスが通っているかを確認方法はどんな風にすればいいのでしょう?

とりあえず、コードをVisual Studioに張り付けてみると、こんな感じでごたごたエラーが出ます。

イメージ説明

いろいろ書かせて頂きましたが、まずは、MInGWとQTcreaterにパスが通っているかどうかの確認方法と、通って田舎た場合にどうやってパスを通したらいいかが知りたいです。

その上で、ビルドをきちんとやってみたいと思いますが。。。

【2017/12/31 補足】
Visual Studioでビルドを試みましたが、うまくできません。

メッセージを見ると、以下のようなワーニングが出ます。

-- Warnig: Did not find file Compiler/MSVC-ASM

コンパイラーへのパスが通っていないとか、そういう事なんでしょうか??

イメージ説明

【2018/1/3 追記】
Visual Studio 2015 Update 3を適用しましたが、エラーの内容は変わりませんでした。

イメージ説明

↑Update 3適用されてますよね?

また、エラー内容をよく見ると、Update 3の適用はあくまでもWarningで、明確なエラーは、「プロジェクトファイルが存在しません。」と出ています。

C:\FOSS\LLVM-clang\build-msvc2015>cmake --build . --config Release
Microsoft (R) Build Engine バージョン 14.0.25420.1
Copyright (C) Microsoft Corporation. All rights reserved.

MSBUILD : error MSB1009: プロジェクト ファイルが存在しません。
スイッチ: ALL_BUILD.vcxproj

エラーメッセージを見ますと、「ALL_BUILD.vcxproj」というプロジェクトファイルが無いと言っているようです。
これは、svnかどこかにアップされてて、コピーし忘れているという事でしょうか?

イメージ説明

【2018年1月7日追記】

イメージ説明

フォルダとしては、これだけ出来ました。

![イメージ説明説明]

【2018/1/8 追記】
example.slnをビルドする際に出るエラー。

イメージ説明

InclusionDirectiveという関数について、

'override'で宣言されたメンバー関数が、基底クラスメンバーをうまくオーバーライドしません。

とあります。

【2018/1/8 追記】

イメージ説明

4件のリンクエラーが出ています。

【2018/1/11 追記】

イメージ説明

【2018/1/12 追記】

イメージ説明

【2018/1/14 追記】

イメージ説明

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+3

こんにちは。

この記事に従って、clangをダウンロードしたのですが、ビルドというのがよくわかりません。

かなり厳しい状況ですね。
その記事は私が書いた記事ですので、この記事より判りやすい解説をできる自信はありません。

具体的な質問ならば回答できる可能性はありますが、今回の質問では何が分からないのか理解できませんでした。環境は? どこまでビルドできたのか? CMakeでビルドするような話は全く無い筈ですが、何故そのような疑問が? などなど。

質問するときのヒントを参考にされると良いかも。

また「ビルドというのがよくわかりません」ならば、以前別の目的ですがCMakeを使ったビルドについて解説したことあります。
これや他のサイト等でまずは「ビルドとは何か」、「CMakeとは何か」を把握することができれば、具体的な質問を発することができるようになると思います。頑張ってください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/31 09:55

    Chironian様

    いつもご丁寧にありがとうございます。
    この記事は、Chironian様が書かれたものだったのですね?
    Qiitaの著者様直々に回答して頂けているなんて、なんとも贅沢なお話ですね。
    (普段、いろんな記事を見ていて、質問したい!なんてよく思うので。。。)

    やや話が脱線しましたが、CMakeでのビルドというのは私の勘違いだったようです。
    質問に補足で書きましたが、CMakeというか、記事にある、ビルドの為の

    1.MinGWとQtCreatorにパスを通しておく。

    この部分を読み飛ばしていました。
    ちょっと調べてみます。

    キャンセル

  • 2017/12/31 11:34

    MinGWにパスが通っている事は確認できました。
    次は、QtCreatorにパスを通すことをやってみます。

    キャンセル

  • 2017/12/31 17:13

    えっと、まずお使いの開発環境をはっきりさせて下さい。
    恐らく、Windows上でVisual Studioを使っているのではないかと予想します。(業務でMinGWを使うケースはレアですし。)
    その場合は、その次の記事を見た方が近いです。https://qiita.com/Chironian/items/8770c8ab833086fb51a9
    でも、Visual Studio 2013だし、もう古いかも。
    Visual Studio 2017ではまだllvmをビルドできないので、Visual Studio 2015を使うことをお勧めします。

    Visual Studioを使う場合、MinGWやQtCreatorのことは忘れてOKです。

    キャンセル

  • 2017/12/31 18:40

    なるほど・・・確認しないで余計な雑音を入れてしまいました。申し訳ありませんでした。

    キャンセル

  • 2017/12/31 22:43

    cateyeさん。
    いえいえ、他にも同じような疑問を感じる人居ると思うので補足させて貰った感じです。
    llvmにプリビルド版があるという情報も有用な情報と思います。

    キャンセル

  • 2018/01/01 09:25

    Chironian様

    さらに詳しいご説明ありがとうございます。
    環境はWindows10で
    今インストールしてあるのは、Visual Studio2015です。

    他には、CMake、MinGW、QtCreatorはインストールはしたのですが、使い方がよくわからないので、結局Visual Studio 2015でもごちゃごちゃやってみたという感じです。

    キャンセル

  • 2018/01/01 09:25

    とりあえず、教えて頂いた、Visual Studioでのビルドを試してみます!

    キャンセル

  • 2018/01/01 13:06

    Chironian様
    Visual Studioでビルドしてみたのですが、成功したのか失敗したのかがわからないです。。。
    とりあえず、VC2013をVC2015に書き換えて実行してみたのですが、「build-msvc2015」フォルダにはなにやら出来たのですが、「install-msvc2015」フォルダには何もできなかったです。

    記事にはビルドに相当時間がかかるとあるのですが、そんなに高いスペックのマシンでもないのに、10分ぐらいで終わってしまいました。

    これ、この質問はいったんクローズして、clangのビルド方法として別スレにした方がいいでしょうか?

    まずは、ビルドの成功可否と、成功後にどのように使うものなのかが知りたいです。

    キャンセル

  • 2018/01/01 23:24

    その状況ならビルドは失敗していると思います。
    メッセージが多量にでている筈です。その最初の error 行からの数行を挙げて貰えると何か分かるかもしれません。(質問へ追記の形が判りやすいと思います。)
    clangのビルド方法から外れていませんし、質問はこのまま継続で良いと思います。

    ところで、実は私は libTooling をビルドするためのCMakeスクリプトを公開しているので、そちらへ誘導した方がよいのか悩ましいのですが、恐らくogura87さんご自身で libTooling をビルド出来たほうが良いだろうと思います。(一応、公開先は https://github.com/yossi-tahara/build_libTooling です。OSSのビルドに慣れている方ようの説明しかしていないので、こちらから攻めるのは厳しいだろうと思います。)

    キャンセル

  • 2018/01/02 16:00

    Chironian様

    今、エラー箇所を探る為に、コマンドの間にpauseを入れて実行してみました。
    その結果、

    cmake -G "Visual Studio 14" ..\llvm -DCMAKE_INSTALL_PREFIX=..\install-msvc2015 -DCMAKE_DEBUG_POSTFIX=d

    この行の実行時に、"コンパイラーが無い”と怒られている気がします。。。
    質問に追記で画像を張り付けたのですが、これで何かわかりますでしょうか??

    >libTooling をビルドするためのCMakeスクリプト

    ええ、見させて頂きましたが、おっしゃるとおり難易度が高い。。。
    OOSの基礎的な事をもっと勉強する必要があるのでしょうか?

    キャンセル

  • 2018/01/02 22:26

    私も見たことはない警告がでています。私はllvm 4.0までしかビルド経験がないからかも知れません。
    Visual Studio 2015 Update 3を使えと言われているようですので、取り敢えずVisuao Stuidio 2015をアップデートしてみると良いと思います。

    > OOSの基礎的な事をもっと勉強する必要があるのでしょうか?

    私の環境でしかテストできていないため、何かあった時に自力である程度は解決できる人でないと結構厳しいのです。その為には、OSSの一般的なビルドの流れの把握や各種スクリプトをいじった経験等が必要になると思います。

    キャンセル

  • 2018/01/03 12:24

    Chirorian様

    お世話になります。
    Visual Studio 2015 Update 3を適用したのですが、Warningのメッセージは変わらずでした。。。

    ただ、質問に追記で記述したのですが、エラーの内容を見ますと、「ALL_BUILD.vcxproj」が無いと言われているようなのですが、このファイルはどこからかコピーしてくるものなのでしょうか?
    それとも自分でどうにかして作成するものなのでしょうか?

    P.S.OSS、勉強するならどんな風がいいとかありますか?

    キャンセル

  • 2018/01/03 20:38

    ALL_BUILD.vcxprojは、その前の構成(CMake -G ... コマンド)にてCMakeが自動生成します。ですので、構成がうまく行っていません。ただ、それが何か見当がつかないです。svnのソースは常に変化しているので私が知らない何かがあるかも知れません。

    そこで、できればllvm 4.0.0のソースをビルドしてみませんか? こちらは私もビルド経験があるのである程度フォローできると思います。http://releases.llvm.org/download.html#4.0.0 にあります。
    LLVM source code
    Clang source code
    clang-tools-extra
    をダウンロードし、何か適当なフォルダを1つ用意して(仮にllvmとします)、その下に下記位置関係になるよう解凍します。
    llvm : ここにLLVM source codeを解凍
    llvm\tools\clang : ここにClang source code を解凍
    llvm\tools\clang\tools\extra : ここにclang-tools-extraを解凍
    後は、上記 llvm フォルダを Qiita の記事の llvm フォルダとして、https://goo.gl/tTLncE の操作を行ってみて下さい。この方法で私は成功しています。

    > P.S.OSS、勉強するならどんな風がいいとかありますか?

    今やっていることは、正にOSSをビルドする方法の実習の1つです。

    因みに上記の操作は、https://github.com/yossi-tahara/build_libTooling のCMake スクリプトでやっている主な部分です。大したことをやっているわけではないのですが、バージョン対応や各種環境対応等で、複雑になるのです。

    キャンセル

  • 2018/01/04 10:12

    Chironian様
    新たな情報、ありがとうございます。
    はい、llvm 4.0.0のビルドやってみます!

    >今やっていることは、正にOSSをビルドする方法の実習の1つです。

    あぁ、なるほど。
    オープンソースソフトウェアという事ですね。
    業務でもこのあたりの知識が必要になる事はたまにあるのですが、だいたい先人の残したマニュアル通りにコマンドを打つだけで、肝心の中身がぜんぜん理解できていないんですよね。。。

    なんでこのオプションを付ける必要があるかとか、そもそもこのコマンドが何をやっているのかとか。。。
    このあたり出来るようになるのは、やはり経験でしょうか。。。

    キャンセル

  • 2018/01/04 11:18

    > このあたり出来るようになるのは、やはり経験でしょうか。。。

    その通り経験です。特に実際に進める際に「なんでこのオプションを付ける必要があるかとか、そもそもこのコマンドが何をやっているのかとか。。。」を調べて、出来る限り内容を理解すると身につきますよ。(ただ、いきなり全部理解しようとすると凄い苦労をするかも知れません。ツールの基礎から応用まで把握しないと理解できないものもありますから。)

    例えば、clangをビルドする際には、CMake -Gコマンドの意味を理解するのは有用と思います。ビルドについては回答でリンクした「CMakeを使ったビルドについて解説」はCMake -Gコマンドの目的を理解するのに有用だろうと考えています。(私の解説力不足な点があるとおもいますが、その辺はご勘弁)
    最近CMakeはOSS界隈に徐々に浸透しています。驚いたことにVisual StudioもCMakeに対応してますし。

    キャンセル

  • 2018/01/05 14:08

    Chironian様
    重ね重ね、ありがとうございます。
    ご解答頂いたとおり、4.0.0でやってみたところ、圧倒的に長くコンパイルが進んでいますので、これはうなく言ったかなと思ったのですが、やはりinstallのフォルダは空でした。
    もしかしたら途中でpauseをしていた事と、PCがいつのまにかスリープになっていたのがおかしいのかもしれないので、もう一度やり直しています。
    (ちなみに、うまくいったかどうかを確認する方法は無いのでしょうか?)

    あと、CMake -Gコマンドについては、教えて頂きましたサイトを読みました。
    Generatorの指定とありますが、つまりコンパイラを指定しているという事なのですね?
    今回で言えば、VS2015コンパイラを指定と。。。

    キャンセル

  • 2018/01/05 16:24

    > やはりinstallのフォルダは空でした。

    "cmake --build . --config Release --target install"コマンドでインストールされる筈です。再度、buildフォルダへ移動してこのコマンドを手で実行したらどうなるでしょうか?

    pauseしていることは問題ないと思います。スリープになっても問題はないはずですが、ちょっと心配です。私は長時間のビルドを行うことも度々あるのでスリープしないように設定してますので、途中でスリープに入ったことがなく経験がありません。

    > Generatorの指定とありますが、つまりコンパイラを指定しているという事なのですね?
    > 今回で言えば、VS2015コンパイラを指定と。。。

    その通りです!

    キャンセル

  • 2018/01/06 14:31

    Chirorian様
    ビルドとインストールはうまくいったようで、数時間かかって、それぞれのフォルダに大量のファイルが出来ました。
    ただ、また新たな問題といいますか、使い方がわかりません。

    https://qiita.com/Chironian/items/6021d35bf2750341d80c

    こちらのURLにある、「3.1.ソースとその概要説明」のソースをVS2015のCLRコンソールアプリケーションとして作成しようとしましたが、ところどころエラーでビルドも通らないんです。

    キャンセル

  • 2018/01/06 16:27

    そちらの記事はQtCreatorを使う前提です。QtCreator用にインクルードパスなどの設定方法を解説しています。
    https://goo.gl/qByRqm の記事のCMakeLists.txtを使って、Visual Studio 用にプロジェクトを生成した方が良いです。

    なお、そういえばこの頃から比べるとlibToolingのライブラリが変わっているので、もしかするとリンク・エラーがでるかも知れません。
    もし、リンク・エラーが出る場合、https://github.com/yossi-tahara/TheorideDriver は目的がかなり異なりますが、libToolingを使うプロジェクトのCMakeLists.txt(https://github.com/yossi-tahara/TheorideDriver/blob/master/CMakeLists.txt)からライブラリリストを持ってくるとうまくいく可能性が高いです。
    このCMakeLists.txtの 82行目~87行目で設定している set文をコピペして、LIB_TOOLING_LIST を LIBRARY_LISTへ変更するイメージです。

    キャンセル

  • 2018/01/07 09:32

    Chironian様

    ご教授ありがとうございます。
    教えて頂いたページより、Visual Studio用にビルドをしようと、ページ内の

    CMakeLists.txt
    main.cpp

    をコピーしてexampleフォルダに入れて作成したのですが、その次がわかりません。

    コマンドプロンプトを立ち上げて、build-msvc2013フォルダにて、下記のコマンドを実行という事なのでしょうか?

    cmake -G "Visual Studio 12" -DLLVM_DIR="N:/FOSS/LLVM-clang/build-msvc2013/share/llvm/cmake" ..\example

    この場合、-DLLVM_DIRって何なのでしょう?
    ググっても出てこないので。。。

    また、このオプションで指定されている、

    "N:/FOSS/LLVM-clang/build-msvc2013/share/llvm/cmake"

    というパスは、自分でフォルダを作るのでしょうか?
    前回までのビルド実行時には作成されなかったので。。。

    この時点でこのフォルダが出来ていないのは何かおかしいのでしょうか?

    キャンセル

  • 2018/01/07 12:35

    CMake -G "Visual Studio 12"はVisal C++ 2013の指定していますので、Visal C++ 2015用へ変更下さい。

    "N:/FOSS/LLVM-clang/build-msvc2013"はその記事の冒頭(https://goo.gl/75E1qF)に記載しているように llvmを32ビットビルドした際のlibToolingのインストール先です。ご自身のインストール先に読み替えて下さい。

    キャンセル

  • 2018/01/07 12:41

    ありがとうございます!

    はい、-Gオプションについては2015に書き換えております。
    パスについてはそういう事なんですね。
    やってみます!

    キャンセル

  • 2018/01/07 12:51

    Chironian様

    cmakeを実行する際のパスは、CMakeLists.txtが存在するパスであってますでしょうか。。。
    CMakeLists.txtにて実行すると、何やら実行できるのですが、最終的に

    Configring incomplete, errors occuerd!

    となって止まってしまいます。。。

    キャンセル

  • 2018/01/07 13:01

    かなり進んできましたね。がんばってください。

    後、-DLLVM_DIR=xxxについて回答漏れてました。
    これは、CMakeLists.txtの中でset(LLVM_DIR, xxx)と書くのと同じ効果をもたらします。
    本家のサイトの https://cmake.org/cmake/help/v3.10/manual/cmake.1.html にて説明があります。
    (これはCMake 3.10のドキュメントです。お使いのバージョンのものを見るのがベストです。微妙に変わっていることがありますので。)
    そして、CMakeLists.txtの中にfind_package(LLVM REQUIRED CONFIG)がありますが、ここでfind_packageに必要なCMakeスクリプトがあるフォルダを指定しています。
    https://cmake.org/cmake/help/v3.10/command/find_package.html

    あああ、そういえば、上記フォルダは確かllvm 3.9.0あたりで変わりました。
    "llvmのインストール先/lib/cmake/llvm"を指定して下さい。

    キャンセル

  • 2018/01/07 13:04

    回答が行き違いました。

    > cmakeを実行する際のパスは、CMakeLists.txtが存在するパスであってますでしょうか。。。

    それは避けた方が良いです。ソースとビルド用に生成されるファイル群が混在してしまいますので。
    Qiitaの記事に書いているようにビルド・フォルダで実行します。

    キャンセル

  • 2018/01/08 10:17

    Chironian様

    Visual Studioのソリューションファイル及び、プロジェクトファイルの生成まで行きました。
    お陰様で、かなり進んでまいりました。

    ただ、生成されたソリューションファイル(example.sln)を起動して、ビルドしようとすると、エラーが出てビルドが出来ません。
    このエラー、一体どうしたものかという感じです。。。

    質問の追記として画像キャプチャを張り付けたのですが、

    InclusionDirectiveという関数について、

    'override'で宣言されたメンバー関数が、基底クラスメンバーをうまくオーバーライドしません。

    とあります。

    これはまた何かのファイルが足りないのでしょうか?
    それとも、cmakeが失敗しているのでしょうか?

    気になるのは、cmakeがバージョン3.7.2です。
    最新の3.10にアップグレードする必要があるという事なのでしょうか?

    また、cmakeを実行するフォルダは、ビルドフォルダとの事ですが、認識が合っているか間違っているかわかりませんが、ビルドフォルダ(自分の場合はbuild-msvc2015フォルダ)で実行すると、エラーで実行できません。
    あくまでも、実行するフォルダは、exampleフォルダです。
    example.slnも、exampleフォルダ内にできています。

    これは、cmakeのバージョンが3.7.2と古いからでしょうか?
    それとも、cmakeをexampleフォルダで実行するのがいけないのでしょうか?

    実行したcmakeコマンドは以下の通りです。

    cmake -G "Visual Studio 14" -DLLVM_DIR="C:\FOSS\LLVM-VS\install-msvc2015\lib\cmake\llvm" ..\example

    キャンセル

  • 2018/01/08 10:48

    エラー・メッセージの通りInclusionDirectiveのオーバーライドに失敗しています。llvmのバージョンが変わったことでInclusionDirectiveが変化したのかと思ったのですが、そうでもないようです。
    InclusionDirectiveのドキュメントは、https://goo.gl/hyPy1q にありますが、変わっていません。

    ただ、エラーメッセージにModuleが曖昧とでてます。もしかすると別にModuleと言うクラスが新規に追加されて曖昧になったのかもしれません。
    InclusionDirectiveのドキュメントによると Module は、clang::Moduleのようですので、下記のように修正してみて下さい。

    修正前> const Module *Imported) override {
    修正後> const clang::Module *Imported) override {

    ビルド・フォルダについては、Qiitaの記事的には下記位置関係となります。

    作業ルート\example main.cppとCMakeLists.txt
    作業ルート\build-msvc2013 AST簡易ダンプ・ツールのビルド・フォルダ

    これを前提に、CMake -Gコマンドを書いてます。"..\example"の部分でCMakeLists.txtがあるフォルダを指定しています。

    > これは、cmakeのバージョンが3.7.2と古いからでしょうか?

    確かllvm周りはCMakeが多少古くても問題なかったと思います。

    > それとも、cmakeをexampleフォルダで実行するのがいけないのでしょうか?

    動作的には問題ないです。ビルド・フォルダごとばっさり消したい時がたまにあるのですが、その時ソースと入り混じっているので面倒というだけです。

    cmakeの生成コマンドはそれで問題ないと思います。

    キャンセル

  • 2018/01/08 23:45

    Chironian様

    ありがとうございます!
    ご指摘の通り、clang::Moduleに書き換えることにより、エラーは解消されました。

    ただ、今度は4件のリンクエラーが出て、やはりビルドは完了していない状態です。
    リンクエラーの内容は、また質問の追記として画像をアップしたのですが、これは一体何が問題なのか。。。

    Chironian様、いかがでしょうか?
    今度も何か心当たりというか、解決策的な事はありますでしょうか?

    キャンセル

  • 2018/01/09 00:30

    リンク・エラーがでているVerQueryValueW()等は、Windowsに標準で含まれる関数群です。
    https://msdn.microsoft.com/ja-jp/library/cc364858.aspx
    ↑にある通り、Version.libのリンクが必要なようですが、Visual Studioの標準ではリンクされないようです。
    CMakeLists.txtのLIBRARY_LISTを設定しているところの最後に下記を追加して、再度、CMake -G ....をやると通ると思います。
    set(LIBRARY_LIST ${LIBRARY_LIST} Version.lib)
    この辺も llvmのバージョンアップで変化した部分のようです。

    実はこちらでも全く同じものが再現しましたので、上記で解決するだろうと思います。
    当質問はこのビルドに成功したらクローズするのが良いと思います。

    さて、これで本来の目的の入り口にたどり着いていると思います。
    Qiitaの記事では、VisitCXXRecordDecl でC++のクラスを列挙しています。
    この代わりにVisitFunctionDecl()を使います。これは関数宣言が見つかる度に呼ばれます。
    また、VisitVarDecl()は変数宣言が見つかる度に呼ばれます。
    前者は、http://d.hatena.ne.jp/maminus/20130913/1379080628 が判りやすいと思います。
    後者は、ちょっと参考例が見つかりません。VisitVarDeclはVarDeclを渡してきますので、VarDeclの公式のドキュメント(https://clang.llvm.org/doxygen/classclang_1_1VarDecl.html)などを参考に頑張ってみて下さい。

    キャンセル

  • 2018/01/11 00:49

    Chironian様

    set(LIBRARY_LIST ${LIBRARY_LIST} Version.lib)

    を追記して、再度cmakeを実行してみると、今後は、アップした画像のように、

    Version.libd.libを開く事ができません

    というエラーが出るようになってしまいました。
    追記を、

    set(LIBRARY_LIST ${LIBRARY_LIST} Version)

    に変えてみると、

    Version.libを開く事ができません

    というエラーメッセージに変わります。

    いずれにしても、追記した「Version.lib」というファイルが無いというエラーのようなのですが、Version.libはどこかから入手する必要があるのでしょうか?

    キャンセル

  • 2018/01/11 01:29

    Version.lib自体は、msvcに標準で入っている筈です。
    試しにReleaseビルドしてみて下さい。私はDebugビルド環境を用意してないのでReleaseビルドで成功しています。

    それと、LIBRARY_LISTへ追加するのは安易すぎたようです。
    そのちょっと後で、デバッグ・ビルド時にライブラリ名に d を追加してました。
    そのせいで、Debugビルドのときは、Version.libdに変化し、最後が.libじゃないのでCMakeが.libを補ったようです。因みに私はReleaseビルドしているのでそのままVersion.libがリンクされています。

    target_link_libraries(${PROJECT_NAME} ${llvm_libs})
    の行があります。set(LIBRARY_LIST ${LIBRARY_LIST} Version.lib)を削除し、
    target_link_libraries(${PROJECT_NAME} Version.lib)を追加してみて下さい。

    あと、C4141がclangのソースで出ています。
    昔は出てなかったのですが、以前も警告は結構でてました。下手に修正するわけにも行かないので、私はclangのヘッダのインクルード中は#pragma warningを使って消してます。main.cppの頭の方を参照下さい。

    キャンセル

  • 2018/01/11 12:49

    Chirorian様

    重ね重ねありがとうございます!
    やってみます!

    キャンセル

  • 2018/01/12 00:40

    Chironian様

    やってみました。。。。
    結果、「Version.libを開く事ができません」というエラーは無くなりましたが、新たなエラーが出るようになりました。。。

    質問に追記で画像を添付したのですが、このリンクエラーは一体なんなのでしょうか。。。

    キャンセル

  • 2018/01/12 09:43

    エラーメッセージでIndexedInstrProfReader::create()が見つからないようなので、IndexedInstrProfReaderをllvmのソースの中で探(grep)してみたところ、llvm\include\llvm\ProfileData\InstrProfReader.hで宣言されてました。
    そこで、実体を探そうとllvm\libを眺めてみると、同様にProfileDataフォルダがありました。
    ここでIndexedInstrProfReaderはでてこなかったので、これが継承しているInstrProfReaderを探すと、llvm\lib\ProfileData\InstrProfReader.cppにInstrProfReader::create()がありました。
    これが見つからないと言っているのだと思います。
    llvm\lib\ProfileData\CMakeLists.txtを見ると、add_llvm_library(LLVMProfileData, ...)となるので、この関数は恐らくLLVMProfileDataに含まれます。

    そこで、ogura87さんが修正したCMakeListst.txtに下記が含まれているか確認下さい。

    > set(LIBRARY_LIST ${LIBRARY_LIST} LLVMProfileData LLVMObject LLVMMCParser LLVMBitReader)

    もし、含まれていないなら、2018/01/06 16:27の私のコメントの「もし、リンク・エラーが出る場合」の作業がきちんと行えているか再確認下さい。

    キャンセル

  • 2018/01/14 11:29

    Chironian様

    うーん、教えて頂いたライブラリのリスト、及び、2018/01/06 16:27の「もし、リンク・エラーが出る場合」にある、CMakeListst.txtにある、 set(LIBRARY_LIST~を全部追記してやってみたのですが、内容変わらず。。。>_<

    静的解析、どうしてもできるようになりたい。。。
    今、仕事でこのあたり、マンパワーでやってまして、時間はかかるわ、ミスはあるわで。。。

    自分でも勉強しなきゃという事だとおもうのですが、何をどのように勉強していくべきか。。。orz

    キャンセル

  • 2018/01/14 13:40

    そのような時は、大抵何か単純な問題です。
    一旦、別途ビルド・フォルダを作って、そこにCMake -Gしてビルドしてみるのも手です。

    CMakeは設定をキャッシュするのでキャッシュクリアしないとうまく行かなくなることがあります。
    CMake-GUIのDelete Cacheでも良いのですが、私は確実のためビルド・フォルダを全削除してます。
    念のため別ビルド・フォルダでやれば必要なものを間違って削除する心配がないので安心です。

    > 自分でも勉強しなきゃという事だとおもうのですが、何をどのように勉強していくべきか。。。orz

    アドバイスしたことはきちんと実行されてますし、結果の伝達も出来ていると思います。(この辺が出来ない人はアドバイスの甲斐がないので途中で諦めます。)
    ですので頑張ればできると思いますよ。たいへんですが検索しまくりつつ経験を積みつつ時としてQAサイトを活用するのがベストと思います。要は知恵と根気とコミュニケーションですね。

    キャンセル

0

外してたらごめんですが・・・
clangを使いたいだけならLLVM DownloadPageから各OS毎のバイナリがダウンロードできますが?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/31 11:14

    cateye様

    ご回答ありがとうございます。
    ええ、clangを使いたいだけといえばそうなんですが。。。

    まだclangって何?って感じでして。。。
    バイナリでも使えるんですね。。。

    ということは、clangというのは実行モジュールという事ですか。。。

    キャンセル

  • 2017/12/31 11:14

    まだそのレベルなんです。。。

    キャンセル

  • 2017/12/31 17:16

    質問主のogura87さんはlibToolingを目的に活動されているようなのです。
    Windows以外はlibToolingのプリビルド版が提供されているのですけど、Windowsは提供されてないので自力ビルドが必要なのですよ。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • C

    3963questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • CMake

    78questions

    CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。