◎正当な理由による書き込みの削除について: 生島英之 とみられる方へ:ビルド自動化ツール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 >>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使いよ集まれ5 ・自動化ツールUWSC使いよ集まれ30 ・暗号通貨取引自動化ツール総合スレ ・ツムツム ハート交換 自動化ツール Part6 ・【常識】マクドナルド×軽自動車=最高 ・【チャイルドシート】使用率上がらぬ自動車大国新潟 「付け替え面倒」 ・【煽り運転】第2の石橋現る!! チャイルドシートマーク付きの軽自動車を高速で煽り追突事故★2 ・【自動車】【マツダ MX-30】プレーンかつサスティナブル、マイルドハイブリッド搭載のコンパクトSUV…価格は242万円から [エリオット★] ・【鳥取】 “鳥取代表”AKB48徳永羚海、地元の“革命”に興奮 自動改札が爆誕「これで大都会だ!」 [朝一から閉店までφ★] ・【PELOコイン】自動売買ツール12 ・【PELOコイン】自動売買ツール3 ・自動生成ツール考えている、と言ってた人間だけど ・自動車メーカーは次々と新車のEV化を決めてるけど・・・ ・foltia ANIME LOCKER アニメ自動録画システム 2 ・★080911 VIP麻雀スレ保守ツールによる「自動保守」荒らし報告スレ ・【自動車】トヨタ3万台リコール=駐車ブレーキ利かぬ恐れ ・【ビットコイン】MAGIC BIT Fの情報交換スレ 【自動売買ツール】 ・ダイハツが35万台リコール ブレーキ自動調整機構が作動しない恐れ ・【国際/経済】ドイツ自動車5社がリコール、排ガス浄化機能が低下 ・【EV】テスラは1980年代の自動車業界の失敗を繰り返していると専門家が指摘 ・【EV】Apple Car製造をヒュンダイ自動車が担当か [田杉山脈★] ・トヨタ自動車、プリウスなど13車種計2万1065台をリコール ・【自動車】警察、救急車両リコール トヨタ系メーカー240台 ・【韓国】現代の電気自動車、相次ぐ炎上で全世界で77000台リコール [動物園φ★] ・佐藤まーちゃんですら軽自動車にネガティブなイメージを持っているとは・・・ ・福田花音「ガソリンスタンドの自動販売機で、缶ビールを開け二人空をながめた」 ・Apple さん 韓国現代自動車との電気自動車生産協議中断へ 理由、合意前の公表 ・トヨタ自動車、このタイミングでプリウスの不具合を発表リコール8兆9999999台 ・【中央日報】中国製部品が底をつく…現代・起亜自動車オールストップの危機[2/3] ・韓国内の自動車「8台に1台は欠陥車」リコール台数「318万台」到達 [12/8] [ばーど★] ・【現代自動車】 韓国史上初の強制リコール…「現代自動車」に強まる当局からの風当たり ・【自動車】世界のEV市場で日本勢が勝つには「ホンダと日産が合併」専門家が指摘 [尺アジ★] ・韓国の現代自動車、“火災の危険”エンジン問題により「米で12万台以上のリコール」[12/5] [首都圏の虎★] ・【電気自動車】ついに日本上陸!中国「EV電池」の忍び寄る影 パナソニックを抜いた超新星「CATL」の正体 ・【自動車】ベンツが雨漏り…ML350など7車種1万1387台リコール、エンジン停止の恐れ [ぐれ★] ・【自動車】すべての新車にアルコール検知システムを搭載するよう国家運輸安全委員会が要求 米 [すらいむ★] ・「15,000社のうち700社だけかろうじて生き残り」…韓国自動車部品メーカーに直撃弾 [2/10] [ばーど★] ・【ニュース動画あり】名阪国道で軽自動車がコーナー曲がり切らずにガードレールに突き刺さり若い男女2人死亡 ・【Netflix】ドラマ『The Chosen One 選ばれし者』製作ストップ、自動車事故で2人死亡 [鉄チーズ烏★] ・【朗報】幸楽苑さん、最先端な自動配膳殺人ロボットをラーメン業界で初めて導入・・・・・・・・・・・・・・・ ・テスラ、ウイグルでショールームオープン! インテル、中国メーカーと自動運転車を開発!→ネトウヨ錯乱 ・【自動車】日産 スカイライン 新型|インフィニティ顔を廃止…エンジンはオールV6、ツインターボは400馬力 ・【トランプ前大統領】トランプ氏も自動車事故のウッズにエール「我々にはタイガーが必要なんだ」 [トランプアゲアゲ★] ・【自動車】三菱eK、eKスペース/日産デイズ、ルークス 計30万2097台をリコール - 制御プログラムが不適切なためブレーキに不具合 [トモハアリ★] ・語られぬ韓国自動車業界の危機 7カ月連続の国内販売落ち込み 現代自「EVオールイン」宣言から短期間での路線変更 [9/7] [昆虫図鑑★] ・【自動車】トラック王国アメリカで日本の軽トラが大人気 女性ユーザーにも 25年ルール待たず輸入/登録の動き [かわる★] ・【自動車運転】「歩行者の進路妨害」「追い越し車線を走り続ける」… うっかり違反に注意!! 破られがちな交通ルール 5選 [鬼瓦権蔵★] ・【現代自動車】 日本進出発表日、インドでは不買運動、米ではリコール… 初日から「注目度」高く ★2 [2/10] [昆虫図鑑★] ・【青森】軽自動車が街路灯に衝突し大破 大学生6人が死傷 運転していた男子大学生からアルコール検出 六戸町 ★2 [さかい★] ・【トヨタ】東南アジア配車最大手「グラブ(シンガポール)」に1100億円出資 自動運転車両「eパレット」でサービスの展開検討 ・【AI】「自動ムービー編集」「ゲーム開発」「文章校正」「論文要約」などGPT-4がわずか3週間で生み出した14の画期的ツール [すらいむ★] ・【韓国プロ野球】最悪の審判陣、「うそ」謀議か…ABS(自動投球判定システム)の「ストライク」を「ボール」に [4/15] [昆虫図鑑★] ・【韓国政府統計】対韓輸出規制がブーメラン 日本の企業や観光地に打撃…ビール輸入額97%減 自動車(日産)87%減 (ホンダ)80%減 ★2 ・他社軽自動車のCMが半端ねぇな ・【懐かしい曲】自動車CMソングを語ろう【最新の曲】 ・日産自動車、セブン&アイもフジテレビのCM差し替え [シコリアン★] ・フジテレビCM差し止め、今日も相次ぐ 新たにアフラック、花王、日産自動車も ・4~8cmまで幅寄せ バス停にピタリ停車できる自動運転バスを開発 ジェイテクトとトヨタ ・厚さ30cmほどに圧縮され男女死亡……軽自動車がタンクローリーとトラックに挟まれ大破する事故 ・【経済】 自動車のCMで「自動車を使わないことへの呼びかけ」が義務化される、違反すると600万円超の罰金 [朝一から閉店までφ★] ・トヨタ自動車、香川照之の「トヨタイムズ」CM放映見合わせ、プロモーション契約は年末で満了 ★2 [爆笑ゴリラ★] ・【話題】韓国の有名女優が三菱自動車のCM出演オファーを拒否! 中国版ツイッターで注目ワード1位に 中国ネットも反応[4/12] ・谷岡自動車 ・三重日野自動車
11:53:36 up 51 days, 12:52, 0 users, load average: 8.06, 7.84, 7.95
in 1.1737229824066 sec
@1.1737229824066@0b7 on 060800