0

我正在尝试创建一个将编译两个文件的生成文件: -main.cpp -queue.h 在头文件内部,我有一个模板队列类的完整实现。主文件包括头文件。

我可以通过在终端(在 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。这很有效,因为我可以创建目标文件,但我认为我不能仅从头文件创建目标文件。

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

4

2 回答 2

2
# 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
于 2015-02-22T19:54:08.070 回答
0

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

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

CXX = g++

all: queue
queue.o: queue.h

clean:
        rm queue queue.o
于 2015-02-22T21:36:35.933 回答