入手先
開発環境
- Windows XP Pro SP3 32bit
- MinGW 5.3.0
- g++ 5.3.0
ライブラリ
環境変数のPathに各DLLがあるディレクトリパスを追記することでexeを実行できる。
前回まで
- MinGWでコンパイルできる環境が整った。
- さらにGTKmm3ライブラリも揃った。
- HelloWorldまでやった。
今回から
でも、コンパイル方法についてはよく知らない。 複雑なコンパイルはMakefileで記述するらしい。
今回からはMakefileでコンパイルする方法を以下のとおりに調べる。
実施 | パターン |
---|---|
未 | 単一コード |
未 | 複数コード |
未 | 略記 |
未 | サブディレクトリ |
未 | Release/Debug切替 |
ソースコード
実行結果
作成
.bat→Makefile→.cc→.o→.exe
使用ツール
- cmd.exe
- mingw32-make.exe
- g++.exe
入力
拡張子 | 説明 |
---|---|
bat | mingw32-make.exe にMakefileを渡す。 |
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の参照ディレクトリ設定コマンド文字列が返ってくる。 |
なお、今回はGTKmmがUnicodeベースなせいか、-DUNICODE
オプションを付与せずとも問題なく表示された。
他にもオプションは色々ある。詳細はg++ --help
コマンドで確認。
所感
1ファイルだけならg++コマンドだけのほうが楽。でも、簡単なところから確認してみた。
Makefileの作成自体が面倒。VC++2010のときは自動でやってくれたから楽だった。でも、Makefileを使いこなせば自分でフォルダ構成を自由につくれる。学習する価値あり。