プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • C言語
  • 【C言語】「ビルド」作業の知識と効率化について(make等)
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【C言語】「ビルド」作業の知識と効率化について(make等)

03.06

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

ビルド作業においては、プログラムが大きくなればなるほど、下記のことを考慮する必要があり複雑になっていきます。

  • 他のソースファイルへの依存関係
  • コンパイルする順序

他のソースファイルへの依存とは?

例えば、下記のようなプログラムがあった場合は、コンパイルしてオブジェクトファイルを作るには「stdio.h」というヘッダファイルが必要になってしまいます。「stdio.h」というヘッダファイルに依存しているということになります。

1
2
3
4
5
#include <stdio.h>
 
int main(){
 ~
}

逆に全く何もインクルードしていないソースファイルやヘッダファイルがあった場合は、それは他ファイルへ依存していないと言えます。

ソースの依存における影響(コンパイル順序)とは?

依存している先のコードが変更された場合は、依存元のソースコードもビルド作業をやり直す必要があります。

解決策は?

シェルスクリプト等のスクリプトを使う。

色々ありますが、まずはビルド作業の手順を記述したスクリプトを作ることでしょう。

Linuxでは「シェルスクリプト」、Windowsでは「バッチファイル」が使えます。

シェルの懸念点

シェルスクリプトでのビルドは、ソースファイルの数に応じて処理時間が長くなってしまいます。

なぜなら、少しの修正でもすべてのファイルに対して毎回コンパイルやリンク作業を行うためです。

それを解決するのがmakeになります。

「make」によるビルド

makeの概要

シェルよりも高度で効率的なビルドを記述できるツールです。シェルスクリプトと違って必ずしも順番に実行されるわけではないです。

Makefile

makeを使う際に、ビルドの手順や構造(プログラムのコンパイルやリンク方法)を記述するファイルになります。

書き方

1
2
ターゲット:依存ファイル
 実行するべきコマンド

種類 説明
ターゲット 出力ファイル名
依存ファイル 出力ファイルの依存ファイル(複数指定可能)
実行するべきコマンド ターゲットを生成するためのコマンド(gcc -c等)

makeの実行方法

1
make ターゲット名(省略したら先頭のターゲットになる。)

シェルと違って必ず前から順番にプログラムが実行されるわけではありません。

シェルスクリプトと違って、ターゲットに記述された依存関係を把握して、修正箇所に影響のあるファイルのみのビルドを自動で行ってくれるのです。短時間でのビルド作業が可能となります。

スポンサーリンク
  • 2019 03.06
  • miyabisan2
  • コメントを書く
  • C言語
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2019 03.05

    【C言語】「コンパイラ」、「リンカ」の役割

  2. 2019 03.16

    【C言語】C言語の特徴、標準ライブラリ、C++の特徴、Visual C++の特徴

  3. 2019 03.17

    【C言語】「ナル文字」について

  4. 2019 03.02

    【C言語】メモリの基本、メモリを扱う関数

  5. 2019 03.17

    【C言語】ポインタの基本や「ポインタ演算」、「ヌルポインタ」について

  6. 2019 03.17

    【C言語】「配列」利用における注意点

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【C++】「名前空間」、「変数(型推論なども)」、「ク…

【C++】クラスのオブジェクト構築や、メモリの概念、ス…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー