一个标头Makefile的多个源文件

时间:2016-07-29 22:55:33

标签: makefile

我有一个头文件Header1.h,其中包含多个函数,这些函数在单独的.cpp中实现,即Func1.cpp,Func2.cpp。

所以,如果我只有一个头文件和一个cpp,我会写:

Object.defineProperty(Object.prototype, 'map', {
    value: function (f, ctx) {
        ctx = ctx || this;
        var self = this;
        var result = {};
        Object.keys(self).forEach(function (k) {
            result[k] = f.call(ctx, self[k], k, self);
        });

        return result;
    }
});

var okayItems = obj.items.map(function (item, index) {
    item = Object.assign({}, item, {
        linkedItems: item.linkedItems.map(function (linkedItem) {
            linkedItem = linkedItem.map(function (value, key) {
                return (key === 'item') ? value.id : value;
            });

            return linkedItem;
        })
    });

    return item;
});

但写作:

Func1.o: Header1.h Func1.cpp
gcc -c Func1.cpp Header1.h

不起作用。

1 个答案:

答案 0 :(得分:2)

您写道:

  

所以,如果我只有一个头文件和一个cpp,我会写:

     

Func1.o:Header1.h Func1.cpp; gcc -c Func1.cpp Header1.h

不,你不会。您永远不会在编译行上放置头文件:由于源文件中的#include语句,编译器将找到头文件。

你会写这个:

all: Func1.o Func2.o

Func1.o: Header1.h Func1.cpp 
        gcc -c Func1.cpp

Func2.o: Header1.h Func2.cpp 
        gcc -c Func2.cpp

然而,这真的不是一个好的makefile。首先,您的源文件具有.cpp扩展名,这意味着它们是C ++文件,但您使用的是gcc,它是一个C编译器。如果您的文件是C ++文件,则应使用g++作为编译器。

其次,make已经知道如何从源文件构建目标文件,因此您甚至不需要编写规则。

你的makefile可以是:

CXX = g++

all: Func1.o Func2.o

Func1.o: Header1.h
Func2.o: Header1.h

这就是你所需要的一切。