2013-02-13 42 views
1
CPP=g++ 
CPPFLAGS=-Iincludes 
SOURCEDIR=code 
SOURCES=$(shell ls $(SOURCEDIR)) 
OBJECTDIR=obj 
BINDIR=bin 
OBJECTS=$(SOURCES:.cpp=.o) 
EXECUTABLE=bin/assignment1 

%.o: $(SOURCEDIR)/%.cpp 
    if [ ! -d $(OBJECTDIR) ]; then mkdir $(OBJECTDIR); fi; $(CPP) $(CPPFLAGS) -c $< -o $(OBJECTDIR)/[email protected] 

$(EXECUTABLE): $(OBJECTS) 
    if [ ! -d $(BINDIR) ]; then mkdir $(BINDIR); fi; $(CPP) $(addprefix $(OBJECTDIR)/,$(OBJECTS)) -o [email protected] 

clean: 
    if [ -d $(BINDIR) ]; then rm -rfv $(BINDIR); fi; if [ -d $(OBJECTDIR) ]; then rm -rfv $(OBJECTDIR); fi; 

all: $(EXECUTABLE) 

現在我的頭文件包含在include中,我的主代碼文件夾中。我想這樣,當我運行使它在程序編譯到bin/assignment1後運行它,我該怎麼做?如何使makefile在生成後執行

+0

還我怎樣才能使它忽略警告? – mystycs 2013-02-13 22:56:01

+1

不要忽略警告。修復您的警告! – 2013-02-13 22:57:18

+0

它的一個小警告我不能修復更改一個int爲null – mystycs 2013-02-13 22:59:22

回答

3

如果您添加幾行到你的makefile,你可以把它運行代碼:

CPP=g++ 
CPPFLAGS=-Iincludes 
SOURCEDIR=code 
SOURCES=$(shell ls $(SOURCEDIR)) 
OBJECTDIR=obj 
BINDIR=bin 
OBJECTS=$(SOURCES:.cpp=.o) 
EXECUTABLE=bin/assignment1 

all: $(EXECUTABLE) run 

%.o: $(SOURCEDIR)/%.cpp 
    if [ ! -d $(OBJECTDIR) ]; then mkdir $(OBJECTDIR); fi; $(CPP) $(CPPFLAGS) -c $< -o $(OBJECTDIR)/[email protected] 

$(EXECUTABLE): $(OBJECTS) 
    if [ ! -d $(BINDIR) ]; then mkdir $(BINDIR); fi; $(CPP) $(addprefix $(OBJECTDIR)/,$(OBJECTS)) -o [email protected] 

.PHONY : clean 
clean: 
    if [ -d $(BINDIR) ]; then rm -rfv $(BINDIR); fi; if [ -d $(OBJECTDIR) ]; then rm -rfv $(OBJECTDIR); fi; 

.PHONY : run 
run: $(EXECUTABLE) 
    $(EXECUTABLE) arg1 arg2 

我動了你的「所有」目標頂端 - 這樣一來,如果你輸入「make」,它會默認「make all」。我還在cleanrun目標上添加了「跑步」目標和「.PHONY」,因爲它們實際上並沒有「製造」任何東西。

+0

我有一個錯誤***缺少分隔符。停止。 – mystycs 2013-02-13 23:07:17

+1

修復它刪除空格 – mystycs 2013-02-13 23:13:47

0

這可能是與

all: execute 

execute: $(EXECUTABLE) 
    $(EXECUTABLE) # This works because you have a well qualified path 
        # If $(EXECUTABLE) was a bare name you would need 
        # to use ./$(EXECUTABLE) 

.PHONY: execute clean 

替換當前的all目標雖然你應該把all目標作爲第一目標在Makefile中,如果你想,當你只需鍵入make它要建那麼簡單;如果你沒有makefile會在未修改的make上生成可執行文件,但只有在使用make all時才能運行。

+0

我有一個錯誤***缺少分隔符。停止。 – mystycs 2013-02-13 23:04:52

+0

Yah。這將是空格,而不是來自操作行的標籤。來自鍵入編輯器而不是鍵入emacs然後複製n-psting。 – dmckee 2013-02-14 00:26:25

1

你只需要添加另一個目標,並把它添加到您的所有依賴列表中,這樣你可以有:

all: $(EXECUTABLE) run 

run: 
    bin/assignment1/main