CMakeは、コンパイラに依存しないビルド自動化のためのフリーソフトウェアです。主にC/C++のビルド管理で使用され、様々なビルド環境に対応しています。Windows、Linux、MacどこでもOK。
https://cmake.org/
基本的な使い方はまず、ビルド環境にCMakeをインストールした後で、ビルド方法を記述したテキストファイルCMakeList.txtをソースと同じ場所に作成した上で、
cmakeをジェネレータを指定して実行するとMakefileやプロジェクトファイルなどが生成されるので、それを使ってビルドします。
ジェネレータの一覧は-Gオプションを付けてcmakeを実行すると見られます。
探検
ビルド自動化ツールCMake Part.1
■ このスレッドは過去ログ倉庫に格納されています
1蟻人間 ◆T6xkBnTXz7B0
2021/06/12(土) 20:08:31.78ID:bymgAWyc2蟻人間 ◆T6xkBnTXz7B0
2021/06/12(土) 20:27:30.69ID:rWz1JMsc CMakeLists.txtの標準的な記述方法は以下の通りです。
【ここから】
# CMakeLists.txt --- CMake project settings
# ex) cmake -G "Visual Studio 9 2008" .
# ex) cmake -DCMAKE_BUILD_TYPE=Release -G "MinGW Makefiles" .
##############################################################################
# CMake minimum version
cmake_minimum_required(VERSION 3.0)
# project name and languages
project(MyProject C CXX)
##############################################################################
# program.exe
add_executable(program file1.cpp file2.cpp)
##############################################################################
【ここまで】
「#」で始まる行はコメントです。
【ここから】
# CMakeLists.txt --- CMake project settings
# ex) cmake -G "Visual Studio 9 2008" .
# ex) cmake -DCMAKE_BUILD_TYPE=Release -G "MinGW Makefiles" .
##############################################################################
# CMake minimum version
cmake_minimum_required(VERSION 3.0)
# project name and languages
project(MyProject C CXX)
##############################################################################
# program.exe
add_executable(program file1.cpp file2.cpp)
##############################################################################
【ここまで】
「#」で始まる行はコメントです。
3蟻人間 ◆T6xkBnTXz7B0
2021/06/12(土) 20:30:21.33ID:rWz1JMsc Win32アプリの場合のCMakeLists.txtの記述方法は以下の通りです。
【ここから】
# CMakeLists.txt --- CMake project settings
# ex) cmake -G "Visual Studio 9 2008" .
# ex) cmake -DCMAKE_BUILD_TYPE=Release -G "MinGW Makefiles" .
##############################################################################
# CMake minimum version
cmake_minimum_required(VERSION 3.0)
# project name and languages
project(MyProject C CXX RC)
##############################################################################
# program.exe
add_executable(program WIN32 file1.cpp file2.cpp program_res.rc)
target_link_libraries(program comctl32)
##############################################################################
【ここまで】
Win32の場合は「RC」と「WIN32」を付けるのを忘れないで下さい。
テンプレここまで。
【ここから】
# CMakeLists.txt --- CMake project settings
# ex) cmake -G "Visual Studio 9 2008" .
# ex) cmake -DCMAKE_BUILD_TYPE=Release -G "MinGW Makefiles" .
##############################################################################
# CMake minimum version
cmake_minimum_required(VERSION 3.0)
# project name and languages
project(MyProject C CXX RC)
##############################################################################
# program.exe
add_executable(program WIN32 file1.cpp file2.cpp program_res.rc)
target_link_libraries(program comctl32)
##############################################################################
【ここまで】
Win32の場合は「RC」と「WIN32」を付けるのを忘れないで下さい。
テンプレここまで。
5蟻人間 ◆T6xkBnTXz7B0
2021/06/12(土) 22:27:30.80ID:bymgAWyc 質問1. なぜMakefileを直接使わないの?
答え. Makefileには方言があって機種依存になっているため、あっちのMakefileがこっちで動かないことが多く、
開かれた幅広いサポートには不向きです。また、ビルドに関係ない記述も多く、移植作業の無駄になります。
CMakeはマルチプラットフォーム対応を少ない作業で実現します。
答え. Makefileには方言があって機種依存になっているため、あっちのMakefileがこっちで動かないことが多く、
開かれた幅広いサポートには不向きです。また、ビルドに関係ない記述も多く、移植作業の無駄になります。
CMakeはマルチプラットフォーム対応を少ない作業で実現します。
6蟻人間 ◆T6xkBnTXz7B0
2021/06/12(土) 22:39:16.78ID:rWz1JMsc 質問2. ジェネレータって何ですか?
答え. ジェネレータとは何かのデータを生成する「生成器」のことです。
CMakeではビルド環境に対応したジェネレータを選ぶことでビルドができる
ようになります。以下はジェネレータの例です(環境によって異なります):
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community>"C:\Program Files\CMake\bin\cmake.exe" -G
CMake Error: No generator specified for -G
Generators
* Visual Studio 16 2019 = Generates Visual Studio 2019 project files.
Use -A option to specify architecture.
...
Visual Studio 9 2008 [arch] = Generates Visual Studio 2008 project files.
Optional [arch] can be "Win64" or "IA64".
Borland Makefiles = Generates Borland makefiles.
NMake Makefiles = Generates NMake makefiles.
NMake Makefiles JOM = Generates JOM makefiles.
MSYS Makefiles = Generates MSYS makefiles.
MinGW Makefiles = Generates a make file for use with
...
答え. ジェネレータとは何かのデータを生成する「生成器」のことです。
CMakeではビルド環境に対応したジェネレータを選ぶことでビルドができる
ようになります。以下はジェネレータの例です(環境によって異なります):
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community>"C:\Program Files\CMake\bin\cmake.exe" -G
CMake Error: No generator specified for -G
Generators
* Visual Studio 16 2019 = Generates Visual Studio 2019 project files.
Use -A option to specify architecture.
...
Visual Studio 9 2008 [arch] = Generates Visual Studio 2008 project files.
Optional [arch] can be "Win64" or "IA64".
Borland Makefiles = Generates Borland makefiles.
NMake Makefiles = Generates NMake makefiles.
NMake Makefiles JOM = Generates JOM makefiles.
MSYS Makefiles = Generates MSYS makefiles.
MinGW Makefiles = Generates a make file for use with
...
7蟻人間 ◆T6xkBnTXz7B0
2021/06/12(土) 22:45:32.10ID:rWz1JMsc 質問3. Visual Studioでビルドしたい場合はどうすればいいですか?
答え. Visual Studioをインストールした場合は、Visual Studio専用の
コマンドプロンプトがWindowsメニューのプログラムリストの中にあります。
VSコマンドプロンプトを起動して、CDコマンドでソースのあるフォルダに
移動して、cmakeを実行して下さい。NMakeを使う方法と
VSソリューションファイルを使う方法の2種類あります。
cmake -G "NMake Makefiles" .
cmake -G "Visual Studio 16 2019" -A Win32 .
cmake -G "Visual Studio 9 2008 Win64" .
答え. Visual Studioをインストールした場合は、Visual Studio専用の
コマンドプロンプトがWindowsメニューのプログラムリストの中にあります。
VSコマンドプロンプトを起動して、CDコマンドでソースのあるフォルダに
移動して、cmakeを実行して下さい。NMakeを使う方法と
VSソリューションファイルを使う方法の2種類あります。
cmake -G "NMake Makefiles" .
cmake -G "Visual Studio 16 2019" -A Win32 .
cmake -G "Visual Studio 9 2008 Win64" .
8蟻人間 ◆T6xkBnTXz7B0
2021/06/12(土) 23:01:14.67ID:rWz1JMsc 質問4. ビルドを自動化できると何かいいことあるの?
答え. GitHub Actionsなどと組み合わせて退屈なビルド・テスト作業を
自動化すると、人間がしなくていい無駄な仕事がなくなります。
GitHubでコミットしたときに複数の環境で自動ビルド・テストするようにすると、
人間はテスト結果の一覧を見るだけで次のコーディングに進むことができます。
CMakeは自動化・省力化を強力に支援します。
答え. GitHub Actionsなどと組み合わせて退屈なビルド・テスト作業を
自動化すると、人間がしなくていい無駄な仕事がなくなります。
GitHubでコミットしたときに複数の環境で自動ビルド・テストするようにすると、
人間はテスト結果の一覧を見るだけで次のコーディングに進むことができます。
CMakeは自動化・省力化を強力に支援します。
9蟻人間 ◆T6xkBnTXz7B0
2021/06/12(土) 23:17:00.91ID:bymgAWyc 自動化するには、バッチ処理や設定などの記述が必要ですが、一度正しく記述できれば、後はクラウド・仮想化・自動化のパワーで
圧倒的な開発手順の革新となります。そのパワーは開発規模が大きいほど効果的です。
圧倒的な開発手順の革新となります。そのパワーは開発規模が大きいほど効果的です。
10蟻人間 ◆T6xkBnTXz7B0
2021/06/12(土) 23:27:34.46ID:bymgAWyc 質問4. CMakeを扱うにはどんな知識・技術が必要?
答え.まず、コマンドプロンプトやシェルスクリプトを少し操れて、コマンドラインやバッチ処理が記述できる程度の技術が必要です。
また、CMakeの記述方法を自分で英語などでウェブ検索して情報を突き止める的確な検索技能が必要になります。
答え.まず、コマンドプロンプトやシェルスクリプトを少し操れて、コマンドラインやバッチ処理が記述できる程度の技術が必要です。
また、CMakeの記述方法を自分で英語などでウェブ検索して情報を突き止める的確な検索技能が必要になります。
11蟻人間 ◆T6xkBnTXz7B0
2021/06/12(土) 23:36:59.18ID:bymgAWyc 例えばCMakeで実行ファイルを作成するには「add_executable」というCMakeコマンドを使用しますが、これの使い方を検索して記述方法を3分の1でも理解できるようなレベルでなければいけません。
ライブラリを作成するには「add_library」というCMakeコマンドを使用します。こういったCMakeコマンドの並びをCMakeLists.txtというファイルに実際に記述するわけです。
ライブラリを作成するには「add_library」というCMakeコマンドを使用します。こういったCMakeコマンドの並びをCMakeLists.txtというファイルに実際に記述するわけです。
2021/06/13(日) 00:59:20.97ID:cRYSJGQ8
add_testってgoogle testとか外部テストライブラリ使わなくても使用可能なの?
13蟻人間 ◆T6xkBnTXz7B0
2021/06/13(日) 01:06:36.03ID:rRRSYwbM >>12
CMakeに付属するテストツールCTestを使うにはenable_testing()を書かないといけないらしい。
https://qiita.com/mrk_21/items/25ee7f00cebb9934b472
CMakeに付属するテストツールCTestを使うにはenable_testing()を書かないといけないらしい。
https://qiita.com/mrk_21/items/25ee7f00cebb9934b472
14蟻人間 ◆T6xkBnTXz7B0
2021/06/13(日) 01:11:13.33ID:rRRSYwbM CMakeをインストールしてれぱCTestも入ってるはず。
15デフォルトの名無しさん
2021/06/13(日) 01:37:26.49ID:lvxMBUj+ >>12
常識的に考えてフレームワークは有ったほうが良いと思います。
常識的に考えてフレームワークは有ったほうが良いと思います。
2021/06/13(日) 02:01:13.11ID:CEo6Ln9Y
「はず」ねえ
2021/06/13(日) 03:36:45.96ID:8vbdM5AU
蟻人間の説明に誤りが多い。このスレは伸びない
2021/06/13(日) 07:19:07.18ID:cRYSJGQ8
CMakeLists.txtの変数の一覧はどこかで見れる?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【芸能】デパートで見つけたランドセルが衝撃価格! つまみ枝豆「どこかで規制しないと」に共感の声殺到 「全て同感」「高すぎますね」 [冬月記者★]
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性に共通点が★2 [Hitzeschleier★]
- 日本語が話せない「外国籍」の子が急増中、授業がストップ、教室から脱走も…先生にも大きな負担「日本語支援」追いつかず★2 [七波羅探題★]
- 日本語が話せない「外国籍」の子が急増中、授業がストップ、教室から脱走も…先生にも大きな負担「日本語支援」追いつかず [七波羅探題★]
- 「暖房が使えない」「食費が高くて子どもの栄養が…」 物価高に苦しむ子育て世帯、政府に期待する支援は [蚤の市★]
- 自ら「パンセクシュアル」だと明かし、東由貴・東京都議(立憲民主)が「パートナーシップ」施策の充実求める:東京新聞 [少考さん★]
- VIP過疎りすぎて9人くらいの同じメンバーがローテーションして書き込んでるだけじゃね?
- 富裕層中国人、トランプが全員日本から奪うwwwwwwww1億5000万円でアメリカ永住権、申し込み開始し中国人殺到 [271912485]
- 高市を支持する日本人さんはなにが理由なの?円安進行、国債金利爆上げ、最大貿易国との摩擦とたった1ヶ月で国益を棄損してるのに [472617201]
- ( ´・ω・` )「油そばって実は割とヘルシーなんだね」
- Twitter医師ら「死ぬほど勉強して博愛精神求められるとかそらみんな美容外科なるわ。嫌なら普通の医療も保険診療廃止しろ!」 [762037879]
- 【高市速報】中国、世界の敵になる [308389511]
