2012-08-08 200 views
0

以下是我使用的Makefile。一切都很好,除了.o應該在obj /目錄下創建,它不是。Makefile麻煩,需要說明

我在做什麼錯誤?

enter image description here

確保

  • 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 

什麼我做錯了嗎?

UPDATE:似乎沒有硬編碼的路徑,而不是依靠pwd分辨率

+0

嘿,不顯示圖像了 - 請你也許上傳或水木清華,讓其他人可以看到它太? – 2013-06-28 12:42:48

回答

1

如果使用-o你必須指定文件名,而不僅僅是輸出路徑時改變。嘗試:

$(CC) $(FLAGS) $(SOURCES) $(OBJ)/[email protected] 

這個問題可以幫助,太:

此外,您可能需要調用FLAGSCFLAGS,意爲 「標誌編譯」。你是不是用make有效,因爲你總是從你的.cpp文件重新編譯所有.o文件


編輯

注意。你應該改用Pattern Rule,這樣Make可以有規則來建立必要的規則。 (即「要建立從.cpp文件中的任何.o文件將,這樣做:___」)

%.o : %.c 
    $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o [email protected] 

您可以編輯本包括$(OBJ)[email protected]之前。

+0

它目前正在嘗試'g ++ -pedantic -Wall -c src/a.cpp -o obj // src/a.o',其中'obj // src'不存在。 – JAM 2012-08-08 03:40:35

+0

您需要更改SOURCES,以避免前面的路徑。也許先在你的shell命令中cd。 – 2012-08-08 03:46:51

+0

剛剛發佈的更新後的Makefile文件爲 – JAM 2012-08-08 03:55:37

0

這樣使用時一切正常。從什麼一個小的修改建議喬納森

enter image description here

+0

所有是* not *好。您沒有爲$(OBJECTS)列出的依賴關係,因此它們將永遠不會重新構建。 – 2012-08-08 15:43:49

+0

良好的通話。謝謝 – JAM 2012-08-08 18:03:55