【发布时间】:2015-02-22 19:48:08
【问题描述】:
我正在尝试创建一个将编译两个文件的 makefile: -main.cpp -队列.h 在头文件中,我有一个模板 Queue 类的完整实现。主文件包括头文件。
我可以在终端(在 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?
【问题讨论】:
-
为什么要编写自己的 Makefile?为什么不使用 cmake 或 qmake 之类的工具来为大量不同平台生成 Makefile?
-
我需要包含项目的makefile,教授将使用他自己的main来测试我的模板类,并且需要为他准备一个通用的makefile。
-
您仍然可以使用 cmake/qmake 生成 Makefile 以与您的项目一起发布。无论如何,随着项目的增长,编写和管理 cmake/qmake 文件会容易得多。
-
实际上,如果文件中有有效的实现,您可以从头文件创建目标文件,但将实现放在头文件中通常不是一个好习惯。话虽如此,如果教授要使用他自己的 main.cpp 并且您提供了一个标头,您可以简单地制作一系列目标来制作“main”,包括标头、main.o 和 main .cpp 文件,他应该能够使用,只需在帖子中扩展您的示例即可。
-
@GusGus 我实际上不同意肯尼的观点。如果您刚刚开始,那么您应该了解 make 的基础知识。我建议前往mindview.net/Books/TICPP/ThinkingInCPP2e.html 并阅读第 1 卷第 3 章的结尾。这是一个很好的介绍,您可以免费下载。
标签: c++ templates makefile header template-classes