2013-02-13 110 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