我正在嘗試創建一個makefile文件,該文件通過.o文件自動編譯並將我的.cpp文件鏈接到可執行文件中。我無法工作的是自動生成(甚至是手動)依賴關係。當我取消註釋下面的評論代碼時,當我運行make build
時沒有任何重新編譯。我所得到的是make: Nothing to be done for 'build'.
,即使x.h(或任何.h文件)已經改變。我一直在試圖從這個問題中學習:Makefile, header dependencies,dmckee的回答,特別是。爲什麼這個makefile不工作?說明:我可以編譯所有內容,但是當我修改任何頭文件時,依賴它的.cpp文件不會更新。因此,如果我編譯我的整個源代碼,那麼我在頭文件中更改#define
,然後運行make build
,並且我得到Nothing to be done for 'build'.
(當我取消註釋下面代碼的註釋塊時)。Makefile - 依賴關係生成
CC=gcc
CFLAGS=-O2 -Wall
LDFLAGS=-lSDL -lstdc++
SOURCES=$(wildcard *.cpp)
OBJECTS=$(patsubst %.cpp, obj/%.o,$(SOURCES))
TARGET=bin/test.bin
# Nothing happens when i uncomment the following. (automated attempt)
#depend: .depend
#
#.depend: $(SOURCES)
# rm -f ./.depend
# $(CC) $(CFLAGS) -MM $^ >> ./.depend;
#
#include .depend
# And nothing happens when i uncomment the following. x.cpp and x.h are files in my project. (manual attempt)
#x.o: x.cpp x.h
clean:
rm -f $(TARGET)
rm -f $(OBJECTS)
run: build
./$(TARGET)
build: $(TARGET)
$(TARGET): $(OBJECTS)
@mkdir -p $(@D)
$(CC) $(LDFLAGS) $(OBJECTS) -o [email protected]
obj/%.o: %.cpp
@mkdir -p $(@D)
$(CC) -c $(CFLAGS) $< -o [email protected]
我運行了'$(info sources:$(SOURCES))',我的源代碼是我認爲它們的,那就是所有.cpp文件,而不是頭文件。我想頭文件不應該包含源文件,因爲它們只能在從#include指令調用時編譯。另外,我試圖澄清我的問題,告訴我是否需要進一步澄清。 – nijoakim 2012-07-07 09:24:44
我按照以下教程解決了這個問題:http://scottmcpeak.com/autodepend/autodepend.html。我將?obj /%。o:%.cpp'-規則更改爲本教程中所述的內容。我的問題是依賴文件沒有包含整個路徑,但錯過了「obj /」。感謝所有的幫助!你最近的編輯讓我發現了問題! :D – nijoakim 2012-07-10 18:29:13