1.3. コンパイラの実行方法/using the compiler

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

There are several different C++ compilers. Be careful to use the one that suits your prurpose.

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

Note:

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

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

1.3.1. 殆どの種類のコンパイラに共通のオプション/Compiler options common to most compiler types

ここでは、次のオプションについて紹介します:

The following options will be covered:

オプション/ 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)
-Iab/cde
インクルードサーチパスにab/cdeを追加する/
Add ‘ab/cde’ to the include search path
-DNAME, -DNAME=VALUE
プリプロセッサマクロを定義する/
define a preprocessor macro
-lNAME
ライブラリをリンクする/
link a library

1.3.1.2. デフォルト以外の出力ファイル名を指定する/Specify a non-default output file name

“-o” オプションで出力ファイル名を指定することができます。

The output file name can be specified with the “-o” option.

ソースをコンパイルして、リンクを省略する場合は、出力ファイル名は、ソースファイル名 の拡張子を “.o” に変えたものになります。この場合、出力ファイル名を指定する必要は 特にありません:

When you compile a source file and omit linking, the output file name will be the source file name with the “.cpp” at the end replaced as “.o”. This name is fine and there is no need to specify a different name.

% g++ -c my_file.cpp # コンパイル結果は/the output file will be: my_file.o

ところが、リンクまでさせた場合に生じる 実行形式ファイル 名のデフォルト値は ‘a.out’ であり、殆どのケースで変更する:

However, when you compile a sourcefile and link it into an executable file, the output filename will be “a.out”, by default. In most cases you would want to change this name:

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

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

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.3.1.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.3.1.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