我正在尝试学习makefile。我必须为我的Unix管理/编程类做一个任务,包括为三个文件创建一个makefile:savings.h savings.cpp和savingsTest.cpp。我的老师并没有真正向我们解释有关makefile的事情。我查看了我的书,我理解了一般的想法,但我的语法有问题。我按照我的书的例子,但是我得到了一个错误。这是我到目前为止的makefile代码:
savingsTest.0: savingsTest.cpp savings.cpp savings.h
cc -c savingsTest.cpp
savings.o: savings.cpp savings.h
cc -c savings.cpp
这是我得到的错误:
cc -c savingsTest.cpp
cc: No input file specified, no output generated
*** Error code 1
make: Fatal error: Command failed for target `savingsTest'
v245-2% emacs makefile.txt
有人可以帮我理解语法,这样我就可以确定我做错了什么。感谢任何回应帮助的人。
答案 0 :(得分:1)
您需要整理C ++编译器的名称。我将假设它是CC
,但是还有很多其他名称(例如g++
)。
您的计划savingsTest.0
取决于两个目标文件:savings.o
和savingsTest.o
。 savings.o
文件取决于savings.cpp
和savings.h
。 savingsTest.o
文件取决于savingsTest.cpp
和savings.h
。
这些都写成:
savingsTest.0: savings.o savingsTest.o
CC -o $@ savings.o savingsTest.o
savingsTest.o: savingsTest.cpp savings.h
CC -c savingsTest.cpp
savings.o: savings.cpp savings.h
CC -c savings.cpp
你可能会遗漏最后两个命令行; make
知道如何将.cpp
编译为.o
。
您将学会在makefile
中使用宏。 $@
是正在构建的程序或文件的名称(因此它是savingsTest.0
的简写)。有理由使用它 - 特别是,不要重复自己。
通常应该将宏用于命令和命令参数,库和文件列表。