如何创建仅包含主文件和模板的 makefile header (C++)

How do I create a makefile with only a main file and template header (C++)

我正在尝试创建一个将编译两个文件的 makefile: -main.cpp -queue.h 在 header 文件中,我有模板 Queue class 的完整实现。主文件包括 header 文件。

我可以在终端中(在 Mac 上)通过输入以下内容来测试此代码:

g++ -c main.cpp
g++ -o queue main.o

而且我能够 运行 程序 (./queue) 没有问题。

现在对于这个项目,只需在终端中输入 "make" 即可编译。 对于以前的项目,我使用了这样的东西:

all: sDeque

sDeque: sDeque.o sDeque_main.o
    g++ -o sDeque sDeque.o sDeque_main.o

sDeque.o: sDeque.cpp sDeque.h
    g++ -c sDeque.cpp

sDeque_main.o: sDeque_main.cpp sDeque.h
    g++ -c sDeque_main.cpp
clean:
    rm sDeque sDeque.o sDeque_main.o

但是上面的例子有一个main.cpp,sDeque.cpp和sDeque.h。这是可行的,因为我可以创建 object 文件,但我认为我不能仅从 header 文件创建 object 文件。

对于手头的任务,我只有主文件和 header 文件(因为它是一个模板 class)。 如何为此制作 makefile?

# All the targets
all: queue

# Dependencies and rule to make queue
queue: main.o
    g++ -o queue main.o

# Dependencies and rule to make main.o
main.o: main.cpp queue.h
    g++ -c main.cpp

clean:
    rm queue main.o

R Sahu 的回答是正确的,但请注意,通过利用 GNU make 的内置规则,您可以做得更好(更少打字),这些规则已经知道如何做这些事情。

特别是,如果您将 main.cpp 文件重命名为 queue.cpp(以便它具有与您要生成的程序 queue 相同的前缀),您的整个 makefile可以仅包含:

CXX = g++

all: queue
queue.o: queue.h

clean:
        rm queue queue.o