やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Makefileで単一のソースコードをコンパイルする

MinGWのmakeにてコンパイルする方法を確認してみた。

入手先

GitHub MEGA

開発環境

ライブラリ

環境変数のPathに各DLLがあるディレクトリパスを追記することでexeを実行できる。

前回まで

  1. MinGWでコンパイルできる環境が整った。
  2. さらにGTKmm3ライブラリも揃った。
  3. HelloWorldまでやった。

今回から

でも、コンパイル方法についてはよく知らない。 複雑なコンパイルMakefileで記述するらしい。

今回からはMakefileコンパイルする方法を以下のとおりに調べる。

実施 パターン
単一コード
複数コード
略記
サブディレクト
Release/Debug切替

ソースコード

実行結果

window messagebox

作成

.bat→Makefile→.cc→.o→.exe

使用ツール

  • cmd.exe
    • mingw32-make.exe
    • g++.exe

入力

拡張子 説明
bat mingw32-make.exeMakefileを渡す。
Makefile ファイルの依存関係を定義し、g++でコンパイルする。
cc C/C++ソースコード

出力

拡張子 説明
o オブジェクトファイル。
exe 実行ファイル。

Makefile

program.exe: program.cc
    g++ -DUNICODE -Wall -std=c++11 -s -O3 -o program.exe program.cc `pkg-config gtkmm-3.0 --cflags --libs` 

複雑なように見えるが、基本的に以下のような書式である。

出力ファイル : 入力ファイル
    g++ -o 出力ファイル 入力ファイル オプション...

今回は以下のようになっている。

項目
出力ファイル program.exe
入力ファイル program.cc

program.exeファイルは、program.ccファイルによって構成される。

オプション

オプション 説明
-o .exe,.dll,.aを作成するときのオプション。
-c .oを作成するときのオプション。
-s 知らん。ファイルサイズ落とせる。
-O3 実行速度の最適化。
-Wl,rpath 参考
-DUNICODE UTF-8ソースコードコンパイルする。参考
-Wall すべての警告を表示する。
-std=c++11 C++言語の仕様バージョンを指定する。c++0x, c++11, c++14, c++17あたりか?
-mwindows WindowsAPIを使うときに指定する。
`pkg-config gtkmm-3.0 --cflags --libs` ``記号で囲むとコマンドが実行される。シェルスクリプト構文の仕様。``内のコマンドを実行するとGTKmm3に必要なinclude,libraryの参照ディレクトリ設定コマンド文字列が返ってくる。

なお、今回はGTKmmUnicodeベースなせいか、-DUNICODEオプションを付与せずとも問題なく表示された。

他にもオプションは色々ある。詳細はg++ --helpコマンドで確認。

所感

1ファイルだけならg++コマンドだけのほうが楽。でも、簡単なところから確認してみた。

Makefileの作成自体が面倒。VC++2010のときは自動でやってくれたから楽だった。でも、Makefileを使いこなせば自分でフォルダ構成を自由につくれる。学習する価値あり。