簡體   English   中英

只重新編譯更改對象的Makefile?

[英]Makefile that only recompiles changed objects?

好的,這里的新用戶,我遇到了問題。 我是一名新的c ++學生,並且沒有使用該語言的經驗(大約3個月前)。 我的任務如下:

編寫一個程序,聲明一個由double類型的50個元素組成的數組darray。 初始化數組,以使前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 $@
.cpp.o:
$(CC) $(CFLAGS) $< -o $@

現在,我需要幫助的是將其轉換為一個滿足分配條件的makefile-最好使用逐步說明,以便我可以從中學習。

將您的Makefile修改為:

  1. 自動生成標頭依賴項。
  2. Makefile更改時重新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 $@ $(filter-out Makefile,$^) ${LDFLAGS}

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

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

.PHONY: all

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM