小規模プロジェクトに「make」を使用すると、どのような利点がありますか? [閉鎖]

小規模プロジェクトに「make」を使用すると、どのような利点がありますか? [閉鎖]

これはmake、大規模なプロジェクト、特に説明したように混乱する依存関係がある場合に役立ち、ワークフローMakefileにも役立ちます。make小規模プロジェクトにどのような利点があるのか​​聞いたことがありません。それを持って?

答え1

多くの人々がより複雑なmakefileの詳細とそれに伴う多くの複雑さを研究しています。私は通常、まったく異なる理由でmakefileを使用します。

私は何も覚えたくありません。

プロジェクトが本当に退屈でシンプルでmakefileを「正しく」使用しない場合でも:

all:
    gcc main.c -o project

私はそれについて考えたり、より複雑なプロジェクトとは別の方法で扱う必要はありません。

all:
    gcc libA.c libB.c main.c -o project2

または、フラグ(たとえば-O2)を指定すると、そのフラグが何であるかを覚える必要はありません。

また、単純なmakefileで始まり、後でマージ/リファクタリングする必要がある場合は、各プロジェクトを別々に構築することを覚えておく必要はありません。

答え2

何に関して?

file1.c.という名前の2つのファイルに分割されたプログラムがあるとしますfile2.c。以下を実行してプログラムをコンパイルできます。

cc file1.c file2.c -o yourprogram

ただし、これを行うには、1つのファイルのみが変更されても、毎回両方のファイルを再コンパイルする必要があります。コンパイル手順を次のように分割できます。

cc -c file1.c
cc -c file2.c
cc    file1.o file2.o -o yourprogram

その後、ファイルの1つを編集するときにそのファイルを再コンパイルします(変更内容に関係なく接続ステップを実行します)。しかし、ファイルを編集したらどうでしょうか?それからもう一つ、 両方のファイルを編集するのを忘れて、誤って1つだけ再コンパイルしましたか?

さらに、ファイルが2つだけあっても命令は60文字程度になる。タイピングがすぐに退屈になることがあります。もちろんスクリプトに入れることもできますが、それでは毎回再コンパイルします。あるいは、どのファイルが変更されたかを確認し、必要なコンパイルのみを実行する非常にカラフルで複雑なスクリプトを書くこともできます。何を言いたいのか分かりますか?

答え3

小規模プロジェクトの場合でも、依存関係のロジックを制御し、ビルドを自動化することが役立ちます。また、インストールとアンインストールをトリガーするために使用されるため、リセットフェーズのマスタースイッチです。

答え4

Makefile私の非常に小さなプロジェクトの例:getPixelColor

これは、2つのオプションのパラメータである座標を使用して名前で知ることができるものと正確に一致します。

私は特にそこで物事が互いに依存する方法が好きです。

COORDS ?= 0 0

CXX := g++-8
CXXFLAGS := -std=c++17 -Wall -Wextra -Werror -Wpedantic -pedantic-errors
LDLIBS := -lX11
RM := rm -f

BIN := getPixelColor
SRC := $(BIN).cpp

$(BIN): $(SRC)
    $(CXX) $(CXXFLAGS) $(SRC) -o $(BIN) $(LDLIBS)

.PHONY: clean
clean:
    $(RM) $(BIN)

.PHONY: run
run: $(BIN)
    ./$(BIN) $(COORDS)

ご覧のとおり、追加の入力を必要とせずに必要なすべての操作を実行します。


使用法

以下から実行できます。

  1. 古いバイナリを整理します。

    make clean
    
  2. 新しいバイナリをコンパイルします。

    make
    
  3. 実行ファイルを実行する方法は2つあります。

    • 基本座標[0,0]

      make run     # equals COORDS='0 0'
      
    • 任意の与えられた座標

      COORDS='5 6' make run
      

Makefileは時々非常に便利です。プロジェクトの規模が大きいほど、利益も大きくなります。しかし、例に示すように、最小のC ++プロジェクトでも多くの問題を減らすことができます。

関連情報