Mac OSでのコンパイル作業

これは,Mac OS,gcc(clang)を使用している人向けの説明です.

Apple XCode,またはCommandline Toolsのいずれかがインストール済とします.

コンパイラの動作確認

「アプリケーション」「ユーティリティ」内の「ターミナル」アプリ をクリックして実行,白い背景の窓が開く.(下記は設定で背景色を黒色に変えている.)
terminal.jpg

ここに,キーボードから以下のコマンド(赤字の部分)を打ち込む.
cc, c++ のどちらかで良い.

 % cc -v
 % c++ -v

インストール済みであれば,

Apple clang version 12.0.0 (clang-1200.0.32.29)
Target: x86_64-apple-darwin20.3.0
Thread model: posix
InstalledDir: /Applications/...(省略).../bin

のようなメッセージが表示される.(表示されるversionの値などは異なる可能性がある)

command not found: c++

のようなメッセージが出る場合は,Xcodeがインストールされていない.
あるいは,インストール後に再起動が必要な場合もある.
インストールの手順をもう一度確認しよう.

プログラムの作成

コンパイラのインストールが確認できたら,エディタ(miやVisual Studio Code, Xcodeなど)で以下のプログラムを打ち込んで,ひとまずデスクトップにhello.cppという名前で保存する.
エディタがない場合は,こちらを右クリックして,デスクトップに保存する.
(「作業ディレクトリ」の概念や,ls, cd コマンドがわかっていれば,好きなディレクトリに保存しても良い.)

/* 有名なHello world プログラム */
#include <stdio.h>

int main(void)
{
    printf("Hello World!\n");
    return 0;
}

コンパイルと実行

「ターミナル」を起動し,以下のようにcdコマンドなどでソースファイル hello.cpp を保存したフォルダに移動する.
(ここではDesktopフォルダを仮定)
フォルダに移動したら,lsコマンドでファイルがあるかどうか確認し,コンパイルおよび実行してみる. (以下の赤字を入力)

% cd ~/Desktop           (作業フォルダに移動)
    
% ls
hello.cpp
(他にもいろいろ表示されるので,今作成したファイルを探す)

% c++ hello.cpp
(エラーがなければ何も表示されない)

% ls
hello.cpp  a.out
(a.out が増えている)

% ./a.out
Hello World!

と出れば,動作確認完了!

豆知識

フォルダを素早く開く

ターミナルから,今作業しているフォルダを開きたい場合は,

open .

ドット記号は,「今作業しているディレクトリ」という意味.カレントディレクトリという.

実行ファイル名の指定

gccでは,実行ファイル名はソースファイル名に関わらず a.out となる.
実行ファイル名を別の名前で出力したい場合は,コンパイル時に -o オプションで実行ファイル名を指定する.

% c++ hello.cpp -o hello    コンパイル
% ./hello                   実行. UNIX系のOSでは,実行に ./ が必ず必要.

gcc のオプション色々

-o オプション以外にも様々なオプションがあり,--helpオプションで確認できる.
以下に,代表的なもののみ示す.

% c++ --help
OVERVIEW: clang LLVM compiler

USAGE: clang [options] <inputs>

OPTIONS:
  -c                      Only run preprocess, compile, and assemble steps
  -I <dir>                Add directory to include search path
  -L <dir>                Add directory to library search path
  -o <file>               Write output to <file>

  -v                      Show commands to run and use verbose output
  -w                      Suppress all warnings