0

以下は私が使用するMakefileです。.oはobj/ディレクトリに作成する必要があり、そうでないことを除いて、すべて問題ありません。

私は何を間違っているのですか?

ここに画像の説明を入力してください

それを確認した後

  • srcディレクトリにはa.cppが含まれています
  • ターゲットディレクトリが存在し、空です
  • objディレクトリが存在し、空です

が実行されたときmake、私は見る

g++ -pedantic -Wall -c src/a.cpp  -o /Users/me/Dropbox/dev/c++/hott/obj/src/a.o

いつあるべきか

g++ -pedantic -Wall -c src/a.cpp  -o /Users/me/Dropbox/dev/c++/hott/obj/a.o

私は何を間違っているのですか?

更新pwd:パスをハードコーディングし、解像度に依存しない場合、何も変わらないようです

4

2 に答える 2

1

を使用する-o場合は、出力パスだけでなく、ファイル名を指定する必要があります。試す:

$(CC) $(FLAGS) $(SOURCES) $(OBJ)/$@

この質問も役立つ場合があります。

また、 「コンパイルのフラグ」を意味する のFLAGSようなものを呼び出すこともできます。CFLAGS


編集

常に .cpp ファイルからすべての .o ファイルを再コンパイルしているため、make を効率的に使用していないことに注意してください。Make が必要なものだけを構築するルールを持つことができるように、代わりにPattern Ruleを使用する必要があります。(つまり、「.cpp ファイルから任意の .o ファイルをビルドするには、次のようにします: ___」) 

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

これを編集して、$(OBJ)の前に含めることができます$@

于 2012-08-08T03:22:53.723 に答える
0

このように使えばOKです。ジョナソンが提案したものからの小さな変更

ここに画像の説明を入力

于 2012-08-08T14:03:37.237 に答える