読者です 読者をやめる 読者になる 読者になる

やってみる

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

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を使いこなせば自分でフォルダ構成を自由につくれる。学習する価値あり。