Makefile 一个标头生成文件的多个源文件

Makefile 一个标头生成文件的多个源文件,makefile,Makefile,我有一个头文件Header1.h,其中包含在单独的.cpp中实现的多个函数,即Func1.cpp、Func2.cpp 因此,如果我只有一个头文件和一个cpp,我会写: Func1.o: Header1.h Func1.cpp gcc -c Func1.cpp Header1.h 但写作: Func1.o: Header1.h Func1.cpp gcc -c Func1.cpp Header1.h Func2.o: Header1.h Func2.cpp gcc -c

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

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

Func1.o: Header1.h Func1.cpp
gcc -c Func1.cpp Header1.h
但写作:

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


Func2.o: Header1.h Func2.cpp 
    gcc -c Func2.cpp  Header1.h
不起作用。

您写道:

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

Func1.o: Header1.h Func1.cpp
gcc -c Func1.cpp Header1.h
职能1.o:Header1.h职能1.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++< /C>作为编译器。 其次,make已经知道如何从源文件构建对象文件,所以您甚至不需要编写规则

您的makefile可以是:

CXX = g++

all: Func1.o Func2.o

Func1.o: Header1.h
Func2.o: Header1.h
这就是你所需要的。

你写道:

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

Func1.o: Header1.h Func1.cpp
gcc -c Func1.cpp Header1.h
职能1.o:Header1.h职能1.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++< /C>作为编译器。 其次,make已经知道如何从源文件构建对象文件,所以您甚至不需要编写规则

您的makefile可以是:

CXX = g++

all: Func1.o Func2.o

Func1.o: Header1.h
Func2.o: Header1.h
这就是你所需要的