1.4. C++ コンパイラの実行方法/using the c++ compiler

1.4.1. コンパイラの種類

C++コンパイラには、種類がいくつかあります。 目的にあったものを使って下さい。

There are several different C++ compilers. Use the one that suits your prurpose.

コンパイラの種類/
type of compiler
用途/
intended purpose
汎用のOSSコンパイラ/
general purpose
open source compilers
(g++, clang)
言語の勉強や、一般のプログラミング/
Learning the language and
general programming
汎用の商用コンパイラ/
general purpose
proprietary compilers
同上/
same as above
特定ライブラリと共に提供
される専用のコンパイラ/
compilers provided with
a specific library
そのライブラリを利用するプログラム
の作成/
Development of programs using that
library

Note:

1.4.2. 多くのコンパイラに共通のオプション/Options common to most compilers

コンパイラが違うと、受け付けるオプションが異なりますが、 主要なオプションはある程度デファクト標準化されており、同じ形式を使うことができます。

Compiler options depend on what compiler you are using. However there is a defacto standard for commonly used options.

そのような代表的なオプションを表に示します。:

The most common options are shown in the table:

オプション/ option

機能/ function

-c

コンパイルのみでリンク省略/
compile only, no linking

-o outfile

出力ファィル名を指定/specify output file

-std=c++11

C++の仕様世代を指定/
specify the generation of c++ standards
(c++11,c++14,c++17)

-I/abc/def

インクルードサーチパスに ‘/abc/def’ を追加する/
Add ‘/abc/def’ to the include search path

-DNAME, -DNAME=VALUE

プリプロセッサマクロを定義する/
define a preprocessor macro

-lalpha

‘alpha’ という名のライブラリをリンクする/
link a library named ‘alpha’

-L/abc/def

ライブラリサーチパスに ‘/abc/def’ を追加する/
Add ‘/abc/def’ to the library search path

-g

デバッガ用のシンボル情報を出力に含める/
Output symbol information for the debugger

-O -O1 -O2

最適化を有効にする/
Enable optimization

-Wall

警告を(ほぼ)全てオンにする/
Turn on (mostly) all warning messages

-pedantic

コンパイラの標準規格外構文を使ったら警告する/
Warn usages of non-standard syntax

1.4.3. OSSコンパイラのオプション一覧/Full list of options for some OSS compilers

実際のコンパイラは沢山オプションを持っています。有名なものについての リファレンスが乗っているページを挙げておきます。何か問題にぶつかった 時に、必要になるかも知れません。

The actual compilers have many options. Here are the reference pages of some famous compilers. They may become necessary when you run into a problem.

1.4.4. よくある使用例/Common usages

1.4.4.2. 出力ファイル名を ‘a.out’ から変える/ Change the output file name ‘a.out’

C++コンパイラでは、実行形式ファイルのデフォルトの名前は ‘a.out’ です。 “-o” オプションで出力ファイル名を指定することができます。

The default file name for exectuable files is ‘a.out’. You can specify the file name with the “-o” option.

% g++ -o my_prog my_prog.cpp #リンクまでして、結果をmy_progとする。compile, link, and name it as my_prog

1.4.4.3. C++言語の規格の世代を指定する/specify the generation of the C++ standard

C++言語の規格は2003年版(C++03)、2011年版(C++11), 2014年版(C++14), 2017年版(C++17), 2020年版(C++20)とあり、どの世代の仕様を使うのかを -stdオプションで 指定します。指定しないとC++03を指定したことになります。

There are several generations for c++ standards: the 2003 version (c++03), and 2011(c++11), 2014(c++14), 2017(c++17), 2020(c++20) versions. You can specify which version to use. If you do not specify any version, c++03 will be assumed.

C++14規格を使ってコンパイルする。:

Compile using the C++14 standard:

% g++ -std=c++14 -c my_file.cpp

1.4.4.4. インクルードサーチパスを追加する/add an include search path

“-I” オプションで、ヘッダファイルをインクルードする時に探しに行く ディレクトリ名である、インクルードサーチパス(include search path)を 指定できます。:

The “-I” option will add an include search path, which is the directory where header files will be searched for:

../header_files ディレクトリをインクルードサーチパスに加える:

Add the directory “../header_files” to the include search path:

% g++ -I../header_files -c my_prog.cpp

1.4.4.5. プリプロセッサマクロを定義する/define a preprocessor macro

“-Dマクロ名” あるいは”-Dマクロ名=値” で、ソースファイル中に #define を書くの と同様にマクロを定義することができます。

The option of the form “-DMACRO_NAME” or “-DMACRO_NAME=VALUE” will define a macro just as it is written in the source file with a #define .

DEBUG_PRINTというマクロを定義してコンパイルする:

Compile with the macro DEBUG_PRINT defined:

% g++ -DDEBUG_PRINT -c my_prog.cpp