-2

Cプログラムをコンパイルして実行しようとしています。プログラムはスレッドを使用します。UbuntuターミナルでWSLを使用してWindows 10を実行しています。(Ubuntu仮想ボックスでも試しています)これは、すべてのプログラムで使用している「デフォルト」のMakefile形式です(それぞれの名前とフラグを変更しています)

CC=gcc
CFLAGS=-I. -w -pthread
DEPS = v1.h
version1: v1

%.o: %.c $(DEPS)
    $(CC) -c -o $@ $< $(CFLAGS)

v1: v1.o
    $(CC) -o v1 v1.o

Cでスレッドを使用するのはこれが初めてで、-pthreadを発見しました。フラグに追加する必要があることがわかりました(これはCFLAGSで行いました)。何らかの理由で、このメイクファイルを上記で実行すると、pthread 関数が見つからないというエラーが発生し、次の行を変更して修正する方法があることに気付きました。

$(CC) -o v1 v1.o -pthread

最後に pthread を追加します。これらすべてにより、フラグ全般についていくつかの調査を行うようになり、gcc のマニュアルページとグーグルを検索した後、これらの質問に対する簡単な答えが見つかりませんでした。

  1. -pthread を .o タスクと .c タスクに追加する必要があるのはなぜですか? 1つだけに追加するだけでは「十分」ではないのはなぜですか?
  2. -w フラグとは何ですか? 「警告」の略であることは知っていますが、-w と -Wall の違いは何ですか?
  3. -Iとは。国旗?繰り返しますが、「インクルード」の略であることがわかりましたが、それが何をしているのかわかりません..私のメイクファイルは、そのフラグの有無にかかわらず機能します。

ありがとうございました。

4

2 に答える 2