◎正当な理由による書き込みの削除について: 生島英之 とみられる方へ:ビルド自動化ツールCMake Part.1 ->画像>1枚
動画、画像抽出 ||
この掲示板へ
類似スレ
掲示板一覧 人気スレ 動画人気順
このスレへの固定リンク: http://5chb.net/r/tech/1623496111/ ヒント: 5chスレのurlに http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。
CMakeは、コンパイラに依存しないビルド自動化のためのフリーソフトウェアです。主にC/C++のビルド管理で使用され、様々なビルド環境に対応しています。Windows、Linux、MacどこでもOK。
https://cmake.org/ 基本的な使い方はまず、ビルド環境にCMakeをインストールした後で、ビルド方法を記述したテキストファイルCMakeList.txtをソースと同じ場所に作成した上で、
cmakeをジェネレータを指定して実行するとMakefileやプロジェクトファイルなどが生成されるので、それを使ってビルドします。
ジェネレータの一覧は-Gオプションを付けてcmakeを実行すると見られます。
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) ############################################################################## 【ここまで】 「#」で始まる行はコメントです。
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」を付けるのを忘れないで下さい。 テンプレここまで。
>>1 訂正。CMakeLists.txtです。Listsは複数形です。
質問1. なぜMakefileを直接使わないの? 答え. Makefileには方言があって機種依存になっているため、あっちのMakefileがこっちで動かないことが多く、 開かれた幅広いサポートには不向きです。また、ビルドに関係ない記述も多く、移植作業の無駄になります。 CMakeはマルチプラットフォーム対応を少ない作業で実現します。
質問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 ...
質問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" .
質問4. ビルドを自動化できると何かいいことあるの? 答え. GitHub Actionsなどと組み合わせて退屈なビルド・テスト作業を 自動化すると、人間がしなくていい無駄な仕事がなくなります。 GitHubでコミットしたときに複数の環境で自動ビルド・テストするようにすると、 人間はテスト結果の一覧を見るだけで次のコーディングに進むことができます。 CMakeは自動化・省力化を強力に支援します。
自動化するには、バッチ処理や設定などの記述が必要ですが、一度正しく記述できれば、後はクラウド・仮想化・自動化のパワーで 圧倒的な開発手順の革新となります。そのパワーは開発規模が大きいほど効果的です。
質問4. CMakeを扱うにはどんな知識・技術が必要? 答え.まず、コマンドプロンプトやシェルスクリプトを少し操れて、コマンドラインやバッチ処理が記述できる程度の技術が必要です。 また、CMakeの記述方法を自分で英語などでウェブ検索して情報を突き止める的確な検索技能が必要になります。
例えばCMakeで実行ファイルを作成するには「add_executable」というCMakeコマンドを使用しますが、これの使い方を検索して記述方法を3分の1でも理解できるようなレベルでなければいけません。 ライブラリを作成するには「add_library」というCMakeコマンドを使用します。こういったCMakeコマンドの並びをCMakeLists.txtというファイルに実際に記述するわけです。
add_testってgoogle testとか外部テストライブラリ使わなくても使用可能なの?
>>12 CMakeに付属するテストツールCTestを使うにはenable_testing()を書かないといけないらしい。
https://qiita.com/mrk_21/items/25ee7f00cebb9934b472 CMakeをインストールしてれぱCTestも入ってるはず。
>>12 常識的に考えてフレームワークは有ったほうが良いと思います。
CMakeLists.txtの変数の一覧はどこかで見れる?
完走出来るかはさておき次スレではビルドツール共用で
CMakeのプロジェクトのなかで変数一覧が記載されたファイルとかないの?
>>21 cmakeに成功すると、CMakeCache.txtというファイルができる。
この中に変数の設定内容が一時的に保存されている。
間違えずに書く自信のある人なら、CMakeCache.txtに書かれてる内容を直接書き換えてもいい。
>>17 蟻は調べながら受け売りコピペしてるだけ
結局自分で調べた方が早い
調べて載せてくれてるならいいじゃないのコピペだって 多少の間違いは周りが訂正してあげれば十分 そんな叩いてばかりしてたらコミュニティが過疎っしまいますよ
糞コミュニティなんていくらでもあるんだから、自分に必要ないと思ったら 寄っていかなきゃいいだけ。
Part 1とか付けると2まで伸びないというジンクスがある。
いつも思うことだがツールチェインとか特に 便利にしようと思って作ったのは気持ち的にはわからんでもないけど かえって手間が増えてんだよねえ・・ 移植作業が必要だのなんだのいっても普通にMakefileでいいわってなる たいした手間じゃないしな 他の奴らも全てに精通してるわけじゃないし
makefileが方言ありすぎてCMake使うようになったってきいた
makeに余計なこと書きすぎなのがいけない。酷いのになるとコロンの右側にstdio.hがあったりする。gcc -Mの出力をそのまんま喰わせてる感じ
cmakeは宣言型、makefileは手続型みたいな感じかな makefileはコマンドやシェルスクリプトを使って何でもできちゃうから他人には読めないようなものになってることがある
makeの場合、環境変数PATHの切り替えで32bit用と64bit用のコンパイラが簡単に切り替えられるが、 cmakeは余計なことをしてくれるので不具合が発生する。 cmake -G "Visual Studio 16 2019" -A Win32 .. こっちは動くが cmake -G "Visual Studio 16 2019" -A Win64 .. こっちは動かない。 ただ、何もしないと勝手にWin64のコンパイラを起動するので指定なしで代用できる。 この時のCMakeLists.txtは自分の書いたものでなくて、そこそこ有名なGitHubのソフトのものなので、 CMakeLists.txtの問題でなく、cmakeそのものの問題だと予想される。 さらに、/MT, /MD, /MTd, /MDdと四種類のライブラリをビルドしようとすると 勝手にコンパイルスイッチをいじられるのでマクロを使って工夫する必要が出てくる。 こういうのを考慮するとcmakeにすると互換性ばっちりとは言い難い。 簡潔なMakefileを書けるなら、そっちで配布した方が結果的に互換性が高いと思う。
昔の教科書で習った make を使うことにしています、内部をしっかり把握しているのでこれが一番いろいろやりやすいのです
https://www.a ;mazon.co.jp/dp/4871481689/
https://www.a ;mazon.co.jp/dp/4871482006/
>>35 /MT, /MD, /MTd, /MDdについてだが、CMake 3.15よりMSVC_RUNTIME_LIBRARYという変数が使えるらしい。
https://cmake.org/cmake/help/latest/prop_tgt/MSVC_RUNTIME_LIBRARY.html https://stackoverflow.com/a/56490614 ターゲットを分けて、それぞれについてset_propertyすれば可能。
add_executable(foo1 foo.c)
set_property(TARGET foo2 PROPERTY
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
add_executable(foo2 foo.c)
set_property(TARGET foo2 PROPERTY
MSVC_RUNTIME_LIBRARY "MultiThreadedDLL$<$<CONFIG:Debug>:Debug>")
...
3.15より前は、ちょっとややこしいコードになる。
>>38 訂正。
「MultiThreadedDLL$<$<CONFIG:Debug>:Debug>」
じゃなくて
「MultiThreaded$<$<CONFIG:Debug>:Debug>DLL」。
「$<$<CONFIG:Debug>:Debug>」というのはgenerator expressionsの一種で、 デバッグ版のときは"Debug", リリース版のときは空文字列に展開されるらしい。 つまり、 「MultiThreaded$<$<CONFIG:Debug>:Debug>DLL」 は、デバッグ版では「MultiThreadedDebugDLL」となり、 リリース版では「MultiThreadedDLL」となる。 なお、MSVC_RUNTIME_LIBRARYを使う場合は、 cmake_minimum_required(VERSION 3.15)の後に cmake_policy(SET CMP0091 NEW)も付けた方がいいらしい。
そうすると四種類のビルドをやるにはこうすると出来るけど、 [ --build . --config Release ] この場合のReleaseとDebugとの関係性はどうなるの? cmake_minimum_required(VERSION 3.15) set(SRC a.cpp b.cpp c.cpp d.cpp e.cpp f.cpp g.cpp h.cpp i.cpp) add_library(xx_mt ${SRC}) add_library(xx_md ${SRC}) add_library(xx_mtd ${SRC}) add_library(xx_mdd ${SRC}) set_property(TARGET xx_mt PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded") set_property(TARGET xx_mtd PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") set_property(TARGET xx_md PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreadedDLL") set_property(TARGET xx_mdd PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreadedDLL$<$<CONFIG:Debug>:Debug>") target_include_directories(xx_mt PUBLIC "../include") target_include_directories(xx_md PUBLIC "../include") target_include_directories(xx_mtd PUBLIC "../include") target_include_directories(xx_mdd PUBLIC "../include")
うーん、あとこれだと自分で記述する場合はいいけど、 GitHubとかで取ってきたgcc用のtar-ballの移植の場合は MSVC_RUNTIME_LIBRARYのためのTARGET沢山増設して CMakeLists.txtが殆ど書き直しに近い状態になるなあ
う~ん、ターゲットは二種類でいいんじゃないか。generator expressionsでデバッグとリリースの差異を吸収できるし。 結局、IDEでデバッグ・リリース切り替えないといけないっしょ。
それって二種類書けば --configのDebug/Releaseで四種類そろうって意味?
そうだよ。プロパティに指定したgenerator expressionの 「MultiThreaded$<$<CONFIG:Debug>:Debug>DLL」は、「MultiThreadedDebugDLL」と 「MultiThreadedDLL」になる。
そうなるとこれでいいんだ。ありがとう。 cmake_minimum_required(VERSION 3.15) set(SRC a.cpp b.cpp c.cpp d.cpp e.cpp f.cpp g.cpp h.cpp i.cpp) add_library(xx_mt ${SRC}) add_library(xx_md ${SRC}) set_property(TARGET xx_mt PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") set_property(TARGET xx_md PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreadedDLL$<$<CONFIG:Debug>:Debug>") target_include_directories(xx_mt PUBLIC "../include") target_include_directories(xx_md PUBLIC "../include")
これが正解になるのかな cmake_minimum_required(VERSION 3.15) set(SRC a.cpp b.cpp c.cpp d.cpp e.cpp f.cpp g.cpp h.cpp i.cpp) add_library(xx_mt ${SRC}) add_library(xx_md ${SRC}) set_property(TARGET xx_mt PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") set_property(TARGET xx_md PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL") target_include_directories(xx_mt PUBLIC "../include") target_include_directories(xx_md PUBLIC "../include")
結局こうやって人を実験台にする気満々で初めて誰にも相手にされなくなるんだよね。 メタ系の言語を推すバカの末路だわ。
バーカバーカ ヘビメタだぜ。奉ろうベイビー! みんな優秀だから質問しなくてもできる。 偉い偉い。
そもそもマルチOSで出そうなんて苦労の割にメリット低いわ。 それもわからんバカがこういうデラックスなツールを使いたがるんだよね。
VSCodeだけでC++やろうとするとこれが一番楽なんよ。マルチは苦労増えるだけやな
cmakeってそんなにデラックスかな? マルチプラットフォームでなくてもmakefile直書きよりメリットあると思うけど makefile → コンパイルやリンクなど手続きを記述していく cmake → 手続きではなく関係性などを定義していく
広く使われることを考えてなかったような設計だよな なんかいまいち近代的じゃない
>>58 その程度の用途でmakefileも満足に書けないならc/c++での開発なんかするべきじゃない。
そんなこといったって・・・ プラットフォームごとに使えるコマンドとか違うじゃん cmakeに関係性を記述して各プラットフォームごとのMakefileは自動生成のほうが楽なんだもん
大した差ではないし、その差が理解できないやつは問題起きた時に明らかに詰むからやめろや。
でも現実には使われてるからな 個別にmakefileなんて書かない
そうやってexcel方眼紙ができていったわけだけれど。
>>60 C/C++の開発からこそCMakeLists.txtを書くんだよ
手元のCのプロジェクトをmakefileからcmakeへ移行したお陰でVSでビルド出来るようになったし、ninjaでもビルド出来るようになって、こっちはビルドが爆速になって良いことしかない
configureオプションとcmakeとを対照できる手段あるかな? ClamAVのビルドツールがcmakeになってしまったので、指定していたconfigureオプションをcmakeに翻訳してやらないとならない。
read.cgi ver 07.7.23 2024/12/25 Walang Kapalit ★ | Donguri System Team 5ちゃんねる
lud20250302035221このスレへの固定リンク: http://5chb.net/r/tech/1623496111/ ヒント: 5chスレのurlに http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。 TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像 ↓「ビルド自動化ツールCMake Part.1 ->画像>1枚 」 を見た人も見ています:・自動化ツールUWSC使いよ集まれ29 ・自動化ツールUWSC使いよ集まれ16 ・自動化ツールUWSC使いよ集まれ30 ・暗号通貨取引自動化ツール総合スレ ・自動化ツールUWSC使いよ集まれ19 ・【チャイルドシート】使用率上がらぬ自動車大国新潟 「付け替え面倒」 ・【画像】川口市「クルド人の皆さんは車検なしの自動車乗り回してもお咎めなしです😂」 ・【自動車】【マツダ MX-30】プレーンかつサスティナブル、マイルドハイブリッド搭載のコンパクトSUV…価格は242万円から [エリオット★] ・[AKITA931] 三菱自動車、3月期260億円の赤字 ・【鳥取】 “鳥取代表”AKB48徳永羚海、地元の“革命”に興奮 自動改札が爆誕「これで大都会だ!」 [朝一から閉店までφ★] ・三菱自動車、今度は隠さずリコール発表 ・自動車メーカーは次々と新車のEV化を決めてるけど・・・ ・自動生成ツール考えている、と言ってた人間だけど ・★080911 VIP麻雀スレ保守ツールによる「自動保守」荒らし報告スレ ・【自動車】マツダからSUVスタイルの軽トールワゴン登場 ・【ビットコイン】MAGIC BIT Fの情報交換スレ 【自動売買ツール】 ・なんで自動車メーカーって株主総会終わってから、一斉にリイコールするの? ・トヨタ自動車、このタイミングでプリウスの不具合を発表リコール8兆9999999台 ・自動車業界 100年に1度の転換期 EV電気自動車でトヨタ終わると判明 ・トヨタ自動車、プリウスなど13車種計2万1065台をリコール ・【自動車】スバルの大量リコール、安価な部品で材料選定ミス [ぐれ★] ・韓国内の自動車「8台に1台は欠陥車」リコール台数「318万台」到達 [12/8] [ばーど★] ・【自動車】警察、救急車両リコール トヨタ系メーカー240台 ・彼氏が愛車の軽自動車のボンネットに水曜どうでしょうのでっけーシール貼ってた ・有期から無期雇用転換、自動車10社中7社が無期雇用にならないよう阻害ルールを設ける ・【IT】日野自動車でエンジン性能に関するデータの改ざん リコールや出荷停止などの対応へ [凜★] ・【自動車】すべての新車にアルコール検知システムを搭載するよう国家運輸安全委員会が要求 米 [すらいむ★] ・【朗報】幸楽苑さん、最先端な自動配膳殺人ロボットをラーメン業界で初めて導入・・・・・・・・・・・・・・・ ・【自動車】世界のEV市場で日本勢が勝つには「ホンダと日産が合併」専門家が指摘 [尺アジ★] ・【USA】飲酒運転疑われた男性、「ビール自動醸造症候群」だった 体内でアルコール醸造 ・【外国人犯罪】経営している自動車教習所を使い、1人10万円でネパール人に免許証を不正取得させていたネパール人を逮捕 ・韓国の現代自動車、“火災の危険”エンジン問題により「米で12万台以上のリコール」[12/5] [首都圏の虎★] ・【自動車】日産 スカイライン 新型|インフィニティ顔を廃止…エンジンはオールV6、ツインターボは400馬力 ・【自動車】ベンツが雨漏り…ML350など7車種1万1387台リコール、エンジン停止の恐れ [ぐれ★] ・「15,000社のうち700社だけかろうじて生き残り」…韓国自動車部品メーカーに直撃弾 [2/10] [ばーど★] ・【自動車】日産『エクストレイル』3000台以上をリコール…先行車や対向車にハイビームを勝手に照射 [シャチ★] ・テスラ、ウイグルでショールームオープン! インテル、中国メーカーと自動運転車を開発!→ネトウヨ錯乱 ・【トランプ前大統領】トランプ氏も自動車事故のウッズにエール「我々にはタイガーが必要なんだ」 [トランプアゲアゲ★] ・語られぬ韓国自動車業界の危機 7カ月連続の国内販売落ち込み 現代自「EVオールイン」宣言から短期間での路線変更 [9/7] [昆虫図鑑★] ・3D技術が致命的に弱い日本人歓喜のツールが登場 Unreal Engineがリアル人物を自動生成する「MetaHuman Creator」発表 ・【自動車】トラック王国アメリカで日本の軽トラが大人気 女性ユーザーにも 25年ルール待たず輸入/登録の動き [かわる★] ・【自動車運転】「歩行者の進路妨害」「追い越し車線を走り続ける」… うっかり違反に注意!! 破られがちな交通ルール 5選 [鬼瓦権蔵★] ・【自動車保険】広がる「ドラレコ」特約、損保各社がレンタル 衝撃検知→コールセンター映像送信→オペレーターが消防やレッカー手配 ・【韓国プロ野球】最悪の審判陣、「うそ」謀議か…ABS(自動投球判定システム)の「ストライク」を「ボール」に [4/15] [昆虫図鑑★] ・【懐かしい曲】自動車CMソングを語ろう【最新の曲】 ・4~8cmまで幅寄せ バス停にピタリ停車できる自動運転バスを開発 ジェイテクトとトヨタ ・【経済】 自動車のCMで「自動車を使わないことへの呼びかけ」が義務化される、違反すると600万円超の罰金 [朝一から閉店までφ★] ・トヨタ自動車、香川照之の「トヨタイムズ」CM放映見合わせ、プロモーション契約は年末で満了 ★2 [爆笑ゴリラ★] ・三重日野自動車 ・為替自動売買】 ・男自動販売機 ・京奈和自動車道 ・令和時代の自動車 ・軽自動車の車検 3 ・自動車税のスレ 2 ・自動運転反対スレ ・自動改札機について ・軽自動車には、軽油 ・自動二輪二種免許作ってくれ ・所詮軽自動車(笑) ・男なら軽自動車 part.7 ・男なら軽自動車 part31 ・高性能自動車電話型 ・自動巡回ソフトというものを作ってみたい ・「COCOA」やっぱり自動テストがなかった
21:32:01 up 62 days, 22:30, 0 users, load average: 10.92, 10.64, 10.05
in 0.10016679763794 sec
@0.10016679763794@0b7 on 061910