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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Q&A

解決済

1回答

12706閲覧

cmakeコマンドを使うと、clやnmakeが見つからないといわれる

RN082491X

総合スコア17

CMake

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

0グッド

0クリップ

投稿2021/03/18 04:39

前提・実現したいこと

Window10です。

OpenCVをgithubからcloneしてビルドしようと思い、cmakeを行ったのですが、コンパイラのclのパスが見つからないとか、nmakeが見つからないなどのエラーが出ます。今直面している具体的なエラーメッセージは下に示します。

以前、Visual Studioを入れて後、アンインストールをしたことで、実体はないのにどこかにパスが残っていることが原因ではないかと考えているのですが、それがどこにあるかわかりません。
この考えは間違っているでしょうか、間違っていないのであればそれはどこに残っているのでしょうか。
教えていただけると幸いです。

試したこと

環境変数についてコントロールパネルから確認しましたが、ありませんでした。

CMakeListsを見てみると、どうやらCMAKE_C_COMPIOLERとCMAKE_CXX_COMPILERがコンパイラを指定する変数として働いているようだったので、

コマンドプロンプトで

echo %CMAKE_C_COMPILER%

を打ち、中に何が入っているか確認しましたが

%CMAKE_C_COMPILER%

と返されました。しかし、CMakeLists内で

message(${CMAKE_C_COMPILER})

などと打つと、clと出力されました。
そのため、どこかでこれらが定義されているのではないかと考えています。

発生している問題・エラーメッセージ

C:\Users\username\opencv\build>cmake .. -- The CXX compiler identification is GNU 6.3.0 -- The C compiler identification is GNU 6.3.0 -- Detecting CXX compiler ABI info CMake Error: Generator: execution of make failed. Make command was: nmake -f Makefile /nologo cmTC_724a2\fast && -- Detecting CXX compiler ABI info - failed -- Check for working CXX compiler: C:/MinGW/bin/g++.exe CMake Error: Generator: execution of make failed. Make command was: nmake -f Makefile /nologo cmTC_1b061\fast && -- Check for working CXX compiler: C:/MinGW/bin/g++.exe - broken CMake Error at C:/Program Files (x86)/cmake-3.20.0-rc4-windows-x86_64/cmake-3.20.0-rc4-windows-x86_64/share/cmake-3.20/Modules/CMakeTestCXXCompiler.cmake:59 (message): The C++ compiler "C:/MinGW/bin/g++.exe" is not able to compile a simple test program. It fails with the following output: Change Dir: C:/Users/username/opencv/build/CMakeFiles/CMakeTmp Run Build Command(s):nmake -f Makefile /nologo cmTC_1b061\fast && 指定されたファイルが見つかりません。 Generator: execution of make failed. Make command was: nmake -f Makefile /nologo cmTC_1b061\fast && CMake will not be able to correctly generate this project. Call Stack (most recent call first): CMakeLists.txt:110 (enable_language)

現在、CmakeList.txt内で

set(CMAKE_C_COMPILER gcc) set(CMAKE_CXX_COMPILER g++)

と入れることで、コンパイラがclとなってしまう問題を無理やり解決しています。
また、エラーメッセージの後ろのほうでg++ではテストプログラムがコンパイルできなかったといわれていることについては、現時点でよくわからないので、その前のnmakeの処理がうまくいっていないせいだと考えています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

一度cmakeのキャッシュ系ファイル類全部消したあと、

cmake -G "MSYS Makefiles" -B build .

Windowsでcmakeを使うときに-G指定しないとデフォルトでVSと思って設定を始める。

投稿2021/03/18 07:38

yumetodo

総合スコア5852

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

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

RN082491X

2021/03/18 09:33

ありがとうございます。解決しました。 質問が二つあります。 1,このような変数は.bashrcのようなファイルに記述されていると思っていたのですが、違いますか。 2,このような方法にどのようにたどり着いたのでしょうか。今後の参考のため聞かせていただければと思います。
RN082491X

2021/03/18 09:36 編集

よろしくお願いします。
yumetodo

2021/03/18 15:12 編集

1. CMAKE_C_COMPILERはたしかに`cmake -DCMAKE_C_COMPILER=gcc`のように外部から与えることもできるように見えますが、これはcmake公式ドキュメントのset()の項目にかかれている通り、あくまでCMake内部の変数です(もっというとキャッシュされるcmake変数、CMakeCache.txtに何がキャッシュされたか記されている)。 ref: - https://cmake.org/cmake/help/latest/command/set.html - https://qiita.com/mrk_21/items/186439952a6665184444 それとは別にcmakeは環境変数を読み出すことも出来、CMAKE_C_COMPILERを環境変数として与えても読み取ってくれますがますが、そういうコードがcmake内部で書かれているだけと推測できます(めんdなのでcmakeの実装追っかけるのは割愛させてください) - https://cmake.org/cmake/help/latest/variable/ENV.html 2. CMakeを日常的に使っているのはパッケージ管理システムを組んでいるような人です。例えばmsys2はpacmanコマンドでパッケージ管理を提供しますが、そのパッケージがどう作られているかというと https://github.com/msys2/MINGW-packages/ にあるようなPKGBUILDファイルで記述されています。この中でcmakeを使ってビルドする手順が書かれているものも多数あります。 ex. ) https://github.com/msys2/MINGW-packages/blob/master/mingw-w64-eigen3/PKGBUILD こういうのを見ることはビルド力を向上させることに寄与する他、これをそのまま流用したり多少の改変を加えてmakepkgする、もっと一般的にはパッケージを作ってやることで自分でビルドしたソフトウェアの管理が楽になることもあり、またそれをこういうところに投げることでOSSへの貢献も出来たりします。パッケージ管理のような長いものには巻かれることです。
yumetodo

2021/03/18 15:14 編集

なにか調べるときそれは大抵誰かがすでにやっているわけです。だれがそういう操作をする最大のユーザーか考えると良質で生きた情報に出会いやすいです、ろくに検証もしてないような怪しいブログとかじゃなくてね(いやそれはそれで使いみちがあるけど)。 「公式ドキュメントを読んでも」ビルドでうまく行かない系は今回示したように、そのソフトウェアのパッケージを作っている人がいないか探してそれの手順を読むことが真っ先にやるべき最良の手順でしょう。その手順でパッケージを作ったってことはうまく言ったってことなんだから。 逆に情報を発信する立場に立つときはそういう良質な情報へリンクを適切に貼ることが読者の助けになるでしょう。
RN082491X

2021/03/19 02:54

丁寧に変身していただきありがとうございます。 今まで、「とりあえずエラーメッセージで検索」や「エラーメッセージからどのファイルがないのかを確認してパソコン内をファイル検索」しかできていなかったので非常に助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.38%

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

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

質問する

関連した質問