0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C++の基本的なコンパイルコマンド

Posted at

はじめに

 流体シミュレーションである数値流体力学(CFD:Computational Fuid Dynamics) をC++で自作した。CFDを作成するために初めてC++やコンパイルというものに触れたので、初心者の立場から、コンパイルおよび実行する際のコマンドプロンプトを、メモがてら記録しておく。
 以下の環境で数値計算を行った。

名前 説明
OS macOS Ventura 13.5
使用言語 C++ ver.13.0
統合開発環境 VSCode ver. 1.81.1

計算結果の出力のコマンド

 C++のコードがあるディレクトリをカレントディレクトリとして、以下のコマンドプロンプトを実行する。

g++ [ファイル名].cpp -o [実行ファイル名]

 これによってカレントディレクトリに実行ファイルが作成される。これを Finder から実行することもできる。しかしリダイレクトすることを考えると、以下のコマンドで実行する方が良い。

./[実行ファイル名]

 これによって大量の数値(計算結果)が出力される。これを出力ファイルとして保存するには、実行の際に上記のコマンドではなく、以下のコマンドを用いてリダイレクトする。

./[実行ファイル名] > output.dat

 これによって標準出力が output.dat ファイルに出力される。標準出力はC++のコードにおいて、以下のコードで出力する。

標準出力
std::cout << [出力内容] << std::endl;

 他のファイルと同様に、output.dat も作業ディレクトリに出力される。output.dat はテキストエディタで開くことも可能である。
 標準エラー出力についても触れておく。標準出力と標準エラー出力を個別のファイルにリダイレクトするには、以下のコマンドで行う。

./[実行ファイル名] > output.dat 2> error.dat

 標準エラー出力はC++のコードにおいて、以下のコードで出力する。

標準エラー出力
std::cerr << [出力内容] << std::endl;

デバックや性能解析のコマンド

 数値計算においては、計算速度が非常に重要となってくる。コンパイルした実行ファイルの計算・実行時間の測定のために、time コマンドが用意されている。これは以下のコマンドで行う。

time ./[実行ファイル名] > output.dat

 また、コード内に

デバッグ用のコード
#ifdef Debug

//デバッグ用のコード

#endif

のようにデバック用のコードを記入した際には、コンパイルの際に -D というオプションを用いてマクロの設定を行う。

g++ [ファイル名].cpp -DDebug=1 -o [実行ファイル名]

 コンパイルの際に上記のコマンドでDebugのマクロを 1 に設定することで、#ifdef と #endif で囲まれた部分のコードがアクティベートされる。

そのほかのコマンド

 最適化レベルを指定することも可能である。最適化レベルには 0 から 3 まであり、以下のコマンドで最適化オプションを指定する。

g++ [ファイル名].cpp -03 -o [実行ファイル名]

 このコマンドでは -03 によって最も高いレベルである最適化レベル 3 が適応される。

結び

 新たに使って便利だったコマンド等があれば順次追加していきます。

 これまで Python しか使ってこず、コンパイルなどが新鮮だったためこのような記事を書いてみました。自分と同じように C 言語やコンパイルに初めて触れたという人の助けに少しでもなれれば嬉しいです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?