2016-10-06 2 views
0

Хорошо, новый пользователь здесь, и у меня проблема. Я новый студент C++, и у меня нет опыта работы на этом языке (около 3 месяцев назад). Мое назначение выглядит следующим образом:Makefile, который только перекомпилирует измененные объекты?

Напишите программу, объявляющую массив darray из 50 элементов типа double. Инициализируйте массив так, чтобы первые 25 элементов были равны квадрату индексной переменной, а последние 25 элементов равны в три раза переменной индекса. Выведите массив так, чтобы напечатано 10 элементов на строку. Программа должна иметь две функции: функцию initArray(), которая инициализирует элементы массива, и функцию prArray(), которая печатает элементы.

У меня есть, что это следующим образом

#include "printArray.h" 
#include "initializearray.h" 
#include "Main.h" 
#include <stdio.h> 
#include <iostream> 
#include <string> 
using namespace std; 
double initArray(); 
double prArray(double arrayone[50]); 
double * dArray; 
int main() { 
    dArray[50] = initArray(); 
    system("PAUSE"); 
    prArray(dArray); 
    system("PAUSE"); 
    return 0; 
} 

#include "printArray.h" 
#include "initializearray.h" 
#include "Main.h" 
#include <iostream> 
#include <string> 
using namespace std; 
double prArray(double arraytwo[50]) 
{ 
    for (int x = 0; x < 50; x++) { 
     cout << arraytwo[x]; 
     if (x = 9 || 19 || 29 || 39 || 49) { 
      cout << endl; 
     } 
    } 
    return 0; 
} 

#include "printArray.h" 
#include "initializearray.h" 
#include "Main.h" 
#include <iostream> 
#include <string> 
int x = 0; 
double arrayone[50]; 
double initArray() 
{ 
    for (x = 0; x < 25; x++) { 
     arrayone[x] = (x*x); 
    } 
    for (x = 25; x <= 50; x++) { 
     arrayone[x] = (x * 3); 
    } 
    return arrayone[50]; 
} 

Теперь моя проблема заключается в том, что назначение продолжает говорить

Написать Makefile компилировать программу выше, что минимизирует перекомпиляции детали на изменения. (например, если один файл функции обновляется, перекомпилируются только необходимые файлы (файлы).) Включите чистую цель, которая удаляет скомпилированные объекты при вызове.

У меня есть основной Makefile:

CC=g++ 
CFLAGS=-c -Wall 
LDFLAGS= 
SOURCES=Main.cpp initializeArray.cpp printArray.cpp 
OBJECTS=$(SOURCES:.cpp=.o) 
EXECUTABLE=Main 
all: $(SOURCES) $(EXECUTABLE) 
$(EXECUTABLE): $(OBJECTS) 
$(CC) $(LDFLAGS) $(OBJECTS) -o [email protected] 
.cpp.o: 
$(CC) $(CFLAGS) $< -o [email protected] 

Теперь, что мне нужна помощь с превращает это в Makefile, который удовлетворяет условиям назначения - предпочтительно шаг за шагом инструкции, так что я могу узнать из это.

+0

И это существующий Makefile не отвечает этим требованиям, как именно? –

+0

@SamVarshavchik ... потому что есть довольно s отсутствует ... – tofro

+0

Из любопытства, почему у вас есть '$ (SOURCES)' в вашей цели? All? – WhozCraig

ответ

0

Изменив Makefile для: зависимостей заголовка

  1. Автоматически генерировать.
  2. Реконструкция и переустановка при Makefile изменениях.

CXX := g++ 
LD := ${CXX} 
CXXFLAGS := -Wall -Wextra -std=gnu++14 -pthread 
LDFLAGS := -pthread 

exes := 

# Specify EXEs here begin. 

Main.SOURCES := Main.cpp initializeArray.cpp printArray.cpp 
exes += Main 

# Specify EXEs here end. 

all: $(exes) 

.SECONDEXPANSION: 

get_objects = $(patsubst %.cpp,%.o,${${1}.SOURCES}) 
get_deps = $(patsubst %.cpp,%.d,${${1}.SOURCES}) 

# Links executables. 
${exes} : % : $$(call get_objects,$$*) Makefile 
    ${LD} -o [email protected] $(filter-out Makefile,$^) ${LDFLAGS} 

# Compiles C++ and generates dependencies. 
%.o : %.cpp Makefile 
    ${CXX} -o [email protected] -c ${CPPFLAGS} ${CXXFLAGS} -MP -MD $< 

# Include the dependencies generated on a previous build. 
-include $(foreach exe,${exes},$(call get_deps,${exe})) 

.PHONY: all 
+0

Большое вам спасибо! – user6933051

Смежные вопросы