実行アプリを作るとは

  • 参考サイト(サイト1サイト2サイト3サイト4サイト5サイト6サイト7)
  • Cmakeを使いたい
  • Cmakeは異なるOSで使えるアプリを使えるようにするのに「ソースを持ってきて使えるようにする」という作業があるが、これがOSごとに違うのは、「配布する側」も「使う側」も厄介
  • Cmakeはこの「使えるようにする」作業をLinuxでもMacでもWindowsでも同じにしたい、という欲求を満足するためのツール
  • さて、このCmakeを使うとはいえ、うまく行かないことがあり、調べものをするが、そのときに出てくる単語がわからない
  • 動作を表す動詞(とそれを担う担当者と)がある
    • コンパイル(コンパイラ)
    • ビルド(ビルダ)
    • リンク(リンカ)
    • メイク
    • コンフィギュア
    • Cmakeする
    • ジェネレイト(Cmakeによる)
  • これらの作業の目的語と動作が作りだすものとを整理しておく
    • ソースファイル(自作のものなど)
    • オブジェクトファイル
    • ライブラリ(2種類ある)
      • 静的ライブラリ
      • 動的ライブラリ
    • 実行可能ファイル
    • Makefile(メイクファイル)
  • その他のこと
    • パス(すべての動作はファイルを使って行うが、それが「どこにあるかがわかるようになっていることは大事で、それを「パスを通す」と言う)
  • さて、これらの単語を使って「使えるアプリを作る」という作業を例文として作ることで動作同士の相互関係などを知る
    • 『自作ソースファイルをコンパイルして自作オブジェクトファイルを作る』
    • 『静的ライブラリのソースファイルをコンパイルして静的ライブラリオブジェクトファイルを作る』
    • 『自作オブジェクトファイルと静的ライブラリオブジェクトファイルとをリンクして、また、動的ライブラリについてはそれを呼び出すと言うステップをリンクして、実行可能ファイルを作る』
    • 『コンフィギュアという動作は、自作ソースファイルの中身とそれが呼び出すライブラリの中身、また、それらがどこにあるかなどを含めた、コンピュータの実行環境を確認しながら、適切なMakefileを作る』
    • 『メイクという動作は、Makefileの情報を元に、ソースファイルをコンパイルしてオブジェクトファイルを作り、その上で、自作オブジェクトファイル、静的ライブラリオブジェクトファイル、動的ライブラリの呼び出しをリンクして実行可能ファイルを作る』
    • 『ビルドと言う動作は、必要なソース・コードをすべてコンパイルして、リンクし、実行可能ファイルを作る』
    • 『Cmakeという動作は、自作ソースファイルの中身とそれが呼び出すライブラリの中身、また、それらがどこにあるかなどを含めた、コンピュータの実行環境を確認しながら、適切なMakefileを作る』
    • 1つ上の文を読むと"Cmakeする"と"コンフィギュア"は同じことになるが、実際には、『Cmakeするという動作は、その内部で「コンフィギュア」する、という動作とそれに引き続く「Makefileをジェネレートする」という動作の2段階で構成される』
    • この『Cmakeの第1段階としてのConfigureするとは、Makefileを作るために必要な、プログラム全体の依存関係を見渡したうえで使用する諸々の置き場と登録したりする』という意味であり、それに基づいて『実際にMakefileを作る(リンクの仕方を決めてリンク手続をファイルにする)という部分をCmakeの第2段階としてジェネレートする』と呼ぶ
    • したがって『コンフィギュア+メイク』というときの『コンフィギュア』と『Cmakeする』とが対応している(ということ?)
  • 大まかに言うと、統合開発環境で、(複数の)ソースファイルを書いて、ライブラリも適宜使いながら、実行可能ファイルを作る、という全動作が『ビルド』
  • 『ビルド』を2つに分けたのが『コンフィギュア+メイク』で、コンフィギュアとメイクとの間をつなぐのがMakefile(コンフィギュアはMakefileを作り、メイクはMakefileを読む)
  • 『ビルド』『コンフィギュア+メイク』が複数のファイルを併せて行う作業であるのに対し
  • コンパイル』は個々のソースファイルを個々のオブジェクトファイルにするという『個別動作』
  • 『リンク』は個別オブジェクトファイルを、適切な順番で一列に並べて張り合わせる作業だが、これは手作業でやるのは大変なので、『プログラムにどういう順番でやるべきかを読みださせて、その結果に基づいてリンクさせる』ようにするのがよいが、その『リンクをする順番情報を決めることと、その決定に応じてリンクする』という作業が『ビルド』の中にはあるし、『コンフィギュア+メイク』の中にもある