web-dev-qa-db-ja.com

Mac OS Xターミナルでmakeを使用してCプログラムをコンパイルする方法

最近、Macbook Proを購入しましたが、端末でCでコーディングを行いたいと思います。

このコマンドでコードをコンパイルできます:

gcc filename.c –o filename

しかし、ベストプラクティスであることがわかっており、ベストプラクティスに従うことを望んでいるので、makeコマンドでコンパイルしたいと思います。

make filename cc filename.c -o filename

このコマンドにより、次の出力が得られます。

make: Nothing to be done for `ex01'.
make: *** No rule to make target `cc'.  Stop.

XcodeとXcode開発者のコ​​マンドラインツールをインストールし、フォルダー/ usr/binmakeおよびmakefileプロパティが表示されていることに注意してください。

Makefileとcc引数でコンパイルできるようにするために何をすべきかについてのヒントはありますか?

9
Raphael Teubner

次の内容の同じパスにMakefileというファイルを作成します。

CC = cc
CFLAGS = -std=c99 -pedantic -Wall
OBJECTS = filename.o

all: appname

filename.o: filename.c
    $(CC) $(CFLAGS) -c filename.c

appname: $(OBJECTS)
    $(CC) $(OBJECTS) -o appname

clean:
    rm -f *.o appname

次に実行します:

make

もちろん、appnameをプログラムの名前に置き換えます

注:「スペース」ではなく「タブ」が必要です

$(CC) $(CFLAGS) -c filename.c

そして

$(CC) $(OBJECTS) -o appname
14
David Ranieri

私は同じ tutorial を追いかけていましたが、同様の問題に遭遇しました。

あなたが何をしたのか正確にはわかりませんが、間違いは間違ったコマンドを実行していたと思います。 make filename cc filename.c -o filenameと入力しましたが、チュートリアルではmake filename部分なしでcc filename.c -o filenameを使用するように指示されました。たぶん、あなたは古いバージョンを読みましたか?

そして、make filenameは正常に動作します Makefileは必要ありません


参考までに、この問題にどのように遭遇し、どのように解決したかを以下に示します。

  1. 以下のコードを入力し、「ex1」という名前のファイルに保存しました

     int main(int argc, char *argv[])
     {
         puts("Hello world.");
    
         return 0;
     }
    
  2. タイプmake ex1in端子
  3. エラーメッセージmake: Nothing to be done for 'ex1'.を取得しました

ご覧のとおり、私の間違いは、ソースコードのファイル名がex1.cでなく、であることでした。 ex1

そして、ファイル名をex1.cに変更してmake ex1を実行すると、うまくいきました。

5
kly