2013-02-13 3 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, мой основной в папке с кодом. Я хочу, чтобы, когда я запустил make, он запускает программу после ее компиляции в bin/assign1, как это сделать?Как сделать make make после сборки

+0

Кроме того, как я могу сделать это игнорировать предупреждения? – mystycs

+1

Не указывайте предупреждения IGNORE. Исправьте свои предупреждения! –

+0

Его небольшое предупреждение, я не могу исправить изменение int до нулевого – mystycs

ответ

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 

Я переместил свою «все» цель к началу - Таким образом, если вы наберете «делать», он по умолчанию сделает «сделать все». Я также добавил цель «запустить» и «.PHONY» на цели clean и run, так как они на самом деле ничего не делают.

+0

У меня была ошибка *** отсутствует разделитель. Стоп. – mystycs

+1

Исправлено удаление удаленных пробелов – mystycs

0

Это может быть так же просто, как заменить текущую all цели

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 целей в качестве первой цели в Makefile, если вы хотите, чтобы быть построены, когда вы просто вводите make; если вы не сделаете свой makefile, вы создадите исполняемый файл на немодифицированном make, но только запустите его, если используете make all.

+0

У меня была ошибка *** отсутствует разделитель. Стоп. – mystycs

+0

Yah. Это будут пробелы, а не вкладка из строки действия. Приходит от ввода в редактор вместо ввода в emacs, а затем copy-n-psting. – dmckee

1

Вам только нужно добавить еще одну цель и добавить его в весь список зависимостей, так что вы могли бы:

all: $(EXECUTABLE) run 

run: 
    bin/assignment1/main 
Смежные вопросы