如何创建仅包含主文件和模板的 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
我正在尝试创建一个将编译两个文件的 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