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

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

新規登録して質問してみよう
ただいま回答率
85.50%
CMake

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

C

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

Q&A

2回答

1276閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

CMake

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

C

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

0グッド

0クリップ

投稿2017/12/30 15:40

編集2022/01/12 10:55

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

ロジック内の関数や関数内で使用しているグローバルなどの解析を行うプログラムを作成したいのですが。。。
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 追記】

イメージ説明

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

こんにちは。

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

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

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

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

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

投稿2017/12/30 17:54

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/12/31 00:55

Chironian様 いつもご丁寧にありがとうございます。 この記事は、Chironian様が書かれたものだったのですね? Qiitaの著者様直々に回答して頂けているなんて、なんとも贅沢なお話ですね。 (普段、いろんな記事を見ていて、質問したい!なんてよく思うので。。。) やや話が脱線しましたが、CMakeでのビルドというのは私の勘違いだったようです。 質問に補足で書きましたが、CMakeというか、記事にある、ビルドの為の 1.MinGWとQtCreatorにパスを通しておく。 この部分を読み飛ばしていました。 ちょっと調べてみます。
退会済みユーザー

退会済みユーザー

2017/12/31 02:34

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

2017/12/31 08: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です。
cateye

2017/12/31 09:40

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

2017/12/31 13:43

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

退会済みユーザー

2018/01/01 00:25

Chironian様 さらに詳しいご説明ありがとうございます。 環境はWindows10で 今インストールしてあるのは、Visual Studio2015です。 他には、CMake、MinGW、QtCreatorはインストールはしたのですが、使い方がよくわからないので、結局Visual Studio 2015でもごちゃごちゃやってみたという感じです。
退会済みユーザー

退会済みユーザー

2018/01/01 00:25

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

退会済みユーザー

2018/01/01 04:06

Chironian様 Visual Studioでビルドしてみたのですが、成功したのか失敗したのかがわからないです。。。 とりあえず、VC2013をVC2015に書き換えて実行してみたのですが、「build-msvc2015」フォルダにはなにやら出来たのですが、「install-msvc2015」フォルダには何もできなかったです。 記事にはビルドに相当時間がかかるとあるのですが、そんなに高いスペックのマシンでもないのに、10分ぐらいで終わってしまいました。 これ、この質問はいったんクローズして、clangのビルド方法として別スレにした方がいいでしょうか? まずは、ビルドの成功可否と、成功後にどのように使うものなのかが知りたいです。
Chironian

2018/01/01 14:24

その状況ならビルドは失敗していると思います。 メッセージが多量にでている筈です。その最初の error 行からの数行を挙げて貰えると何か分かるかもしれません。(質問へ追記の形が判りやすいと思います。) clangのビルド方法から外れていませんし、質問はこのまま継続で良いと思います。 ところで、実は私は libTooling をビルドするためのCMakeスクリプトを公開しているので、そちらへ誘導した方がよいのか悩ましいのですが、恐らくogura87さんご自身で libTooling をビルド出来たほうが良いだろうと思います。(一応、公開先は https://github.com/yossi-tahara/build_libTooling です。OSSのビルドに慣れている方ようの説明しかしていないので、こちらから攻めるのは厳しいだろうと思います。)
退会済みユーザー

退会済みユーザー

2018/01/02 07:00

Chironian様 今、エラー箇所を探る為に、コマンドの間にpauseを入れて実行してみました。 その結果、 cmake -G "Visual Studio 14" ..\llvm -DCMAKE_INSTALL_PREFIX=..\install-msvc2015 -DCMAKE_DEBUG_POSTFIX=d この行の実行時に、"コンパイラーが無い”と怒られている気がします。。。 質問に追記で画像を張り付けたのですが、これで何かわかりますでしょうか?? >libTooling をビルドするためのCMakeスクリプト ええ、見させて頂きましたが、おっしゃるとおり難易度が高い。。。 OOSの基礎的な事をもっと勉強する必要があるのでしょうか?
Chironian

2018/01/02 13:26

私も見たことはない警告がでています。私はllvm 4.0までしかビルド経験がないからかも知れません。 Visual Studio 2015 Update 3を使えと言われているようですので、取り敢えずVisuao Stuidio 2015をアップデートしてみると良いと思います。 > OOSの基礎的な事をもっと勉強する必要があるのでしょうか? 私の環境でしかテストできていないため、何かあった時に自力である程度は解決できる人でないと結構厳しいのです。その為には、OSSの一般的なビルドの流れの把握や各種スクリプトをいじった経験等が必要になると思います。
退会済みユーザー

退会済みユーザー

2018/01/03 03:24

Chirorian様 お世話になります。 Visual Studio 2015 Update 3を適用したのですが、Warningのメッセージは変わらずでした。。。 ただ、質問に追記で記述したのですが、エラーの内容を見ますと、「ALL_BUILD.vcxproj」が無いと言われているようなのですが、このファイルはどこからかコピーしてくるものなのでしょうか? それとも自分でどうにかして作成するものなのでしょうか? P.S.OSS、勉強するならどんな風がいいとかありますか?
Chironian

2018/01/03 11: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 01:12

Chironian様 新たな情報、ありがとうございます。 はい、llvm 4.0.0のビルドやってみます! >今やっていることは、正にOSSをビルドする方法の実習の1つです。 あぁ、なるほど。 オープンソースソフトウェアという事ですね。 業務でもこのあたりの知識が必要になる事はたまにあるのですが、だいたい先人の残したマニュアル通りにコマンドを打つだけで、肝心の中身がぜんぜん理解できていないんですよね。。。 なんでこのオプションを付ける必要があるかとか、そもそもこのコマンドが何をやっているのかとか。。。 このあたり出来るようになるのは、やはり経験でしょうか。。。
Chironian

2018/01/04 02:18

> このあたり出来るようになるのは、やはり経験でしょうか。。。 その通り経験です。特に実際に進める際に「なんでこのオプションを付ける必要があるかとか、そもそもこのコマンドが何をやっているのかとか。。。」を調べて、出来る限り内容を理解すると身につきますよ。(ただ、いきなり全部理解しようとすると凄い苦労をするかも知れません。ツールの基礎から応用まで把握しないと理解できないものもありますから。) 例えば、clangをビルドする際には、CMake -Gコマンドの意味を理解するのは有用と思います。ビルドについては回答でリンクした「CMakeを使ったビルドについて解説」はCMake -Gコマンドの目的を理解するのに有用だろうと考えています。(私の解説力不足な点があるとおもいますが、その辺はご勘弁) 最近CMakeはOSS界隈に徐々に浸透しています。驚いたことにVisual StudioもCMakeに対応してますし。
退会済みユーザー

退会済みユーザー

2018/01/05 05:08

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

2018/01/05 07:24

> やはりinstallのフォルダは空でした。 "cmake --build . --config Release --target install"コマンドでインストールされる筈です。再度、buildフォルダへ移動してこのコマンドを手で実行したらどうなるでしょうか? pauseしていることは問題ないと思います。スリープになっても問題はないはずですが、ちょっと心配です。私は長時間のビルドを行うことも度々あるのでスリープしないように設定してますので、途中でスリープに入ったことがなく経験がありません。 > Generatorの指定とありますが、つまりコンパイラを指定しているという事なのですね? > 今回で言えば、VS2015コンパイラを指定と。。。 その通りです!
退会済みユーザー

退会済みユーザー

2018/01/06 05:31

Chirorian様 ビルドとインストールはうまくいったようで、数時間かかって、それぞれのフォルダに大量のファイルが出来ました。 ただ、また新たな問題といいますか、使い方がわかりません。 https://qiita.com/Chironian/items/6021d35bf2750341d80c こちらのURLにある、「3.1.ソースとその概要説明」のソースをVS2015のCLRコンソールアプリケーションとして作成しようとしましたが、ところどころエラーでビルドも通らないんです。
Chironian

2018/01/06 07: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 00: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" というパスは、自分でフォルダを作るのでしょうか? 前回までのビルド実行時には作成されなかったので。。。 この時点でこのフォルダが出来ていないのは何かおかしいのでしょうか?
Chironian

2018/01/07 03: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 03:41

ありがとうございます! はい、-Gオプションについては2015に書き換えております。 パスについてはそういう事なんですね。 やってみます!
退会済みユーザー

退会済みユーザー

2018/01/07 03:51

Chironian様 cmakeを実行する際のパスは、CMakeLists.txtが存在するパスであってますでしょうか。。。 CMakeLists.txtにて実行すると、何やら実行できるのですが、最終的に Configring incomplete, errors occuerd! となって止まってしまいます。。。
Chironian

2018/01/07 04: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"を指定して下さい。
Chironian

2018/01/07 04:04

回答が行き違いました。 > cmakeを実行する際のパスは、CMakeLists.txtが存在するパスであってますでしょうか。。。 それは避けた方が良いです。ソースとビルド用に生成されるファイル群が混在してしまいますので。 Qiitaの記事に書いているようにビルド・フォルダで実行します。
退会済みユーザー

退会済みユーザー

2018/01/08 01: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
Chironian

2018/01/08 01: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 14:45

Chironian様 ありがとうございます! ご指摘の通り、clang::Moduleに書き換えることにより、エラーは解消されました。 ただ、今度は4件のリンクエラーが出て、やはりビルドは完了していない状態です。 リンクエラーの内容は、また質問の追記として画像をアップしたのですが、これは一体何が問題なのか。。。 Chironian様、いかがでしょうか? 今度も何か心当たりというか、解決策的な事はありますでしょうか?
Chironian

2018/01/08 15: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/10 15: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はどこかから入手する必要があるのでしょうか?
Chironian

2018/01/10 16: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 03:49

Chirorian様 重ね重ねありがとうございます! やってみます!
退会済みユーザー

退会済みユーザー

2018/01/11 15:40

Chironian様 やってみました。。。。 結果、「Version.libを開く事ができません」というエラーは無くなりましたが、新たなエラーが出るようになりました。。。 質問に追記で画像を添付したのですが、このリンクエラーは一体なんなのでしょうか。。。
Chironian

2018/01/12 00: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 02:29

Chironian様 うーん、教えて頂いたライブラリのリスト、及び、2018/01/06 16:27の「もし、リンク・エラーが出る場合」にある、CMakeListst.txtにある、 set(LIBRARY_LIST~を全部追記してやってみたのですが、内容変わらず。。。>_< 静的解析、どうしてもできるようになりたい。。。 今、仕事でこのあたり、マンパワーでやってまして、時間はかかるわ、ミスはあるわで。。。 自分でも勉強しなきゃという事だとおもうのですが、何をどのように勉強していくべきか。。。orz
Chironian

2018/01/14 04:40

そのような時は、大抵何か単純な問題です。 一旦、別途ビルド・フォルダを作って、そこにCMake -Gしてビルドしてみるのも手です。 CMakeは設定をキャッシュするのでキャッシュクリアしないとうまく行かなくなることがあります。 CMake-GUIのDelete Cacheでも良いのですが、私は確実のためビルド・フォルダを全削除してます。 念のため別ビルド・フォルダでやれば必要なものを間違って削除する心配がないので安心です。 > 自分でも勉強しなきゃという事だとおもうのですが、何をどのように勉強していくべきか。。。orz アドバイスしたことはきちんと実行されてますし、結果の伝達も出来ていると思います。(この辺が出来ない人はアドバイスの甲斐がないので途中で諦めます。) ですので頑張ればできると思いますよ。たいへんですが検索しまくりつつ経験を積みつつ時としてQAサイトを活用するのがベストと思います。要は知恵と根気とコミュニケーションですね。
guest

0

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

投稿2017/12/30 20:00

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/12/31 02:14

cateye様 ご回答ありがとうございます。 ええ、clangを使いたいだけといえばそうなんですが。。。 まだclangって何?って感じでして。。。 バイナリでも使えるんですね。。。 ということは、clangというのは実行モジュールという事ですか。。。
退会済みユーザー

退会済みユーザー

2017/12/31 02:14

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

2017/12/31 08:16

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問