我有一个头文件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
不起作用。
答案 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
这就是你所需要的一切。