[解決済み] MakefileとCMakeを使ったコンパイルの違いについて
質問
C/C++でコーディングし、(GNU)Makefileを使ってコンパイルしています。CMakeでも同じことができ、MakeFileを取得することができますね。しかし、MakefileとCMakeを使用してコードをコンパイルすることの違いは何ですか?
どのように解決するのですか?
Make (というより Makefile) はビルドシステムです。コンパイラやその他のビルドツールを動かして、コードをビルドします。
CMake はビルドシステムを生成するものです。Makefile を生成し、Ninja ビルドファイルを生成し、KDEvelop や Xcode プロジェクトを生成し、Visual Studio ソリューションを生成することができます。同じ出発点、同じCMakeLists.txtファイルからです。ですから、プラットフォームに依存しないプロジェクトがあれば、CMakeはそれをビルドシステムにも依存しないようにする方法なのです。
Visual Studio に慣れている Windows 開発者と GNU Make に固執する Unix 開発者がいる場合、CMake は (そのうちの) 一つの方法です。
あなたのプロジェクトがマルチプラットフォームであったり、広く使用されることを意図しているのであれば、私は常に CMake(または他のビルドシステム・ジェネレータ、しかし個人的には CMake が好みです)を使用することをお勧めします。CMake 自身も、依存性検出、ライブラリインターフェイス管理、あるいは CTest、CDash、CPack との統合のような素晴らしい機能を提供しています。
ビルドシステム・ジェネレータを使用することで、プロジェクトはより将来性のあるものになります。今は GNU-Make オンリーであっても、後になって他のプラットフォーム (Windows や組み込み機器) に拡張することになったり、単に IDE を使いたいと思った場合はどうでしょうか。
関連
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】Makefileの中の.PHONYの目的は何ですか?
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] 私的相続、公的相続、保護相続の違いについて
-
[解決済み] ++iとi++の違いは何ですか?
-
[解決済み] GNU Makefile の変数割り当て =, ?=, :=, += の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】coutはstdのメンバではない
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された