我正在尝试为项目创建名为'p1'的makefile。
[当我尝试命令make p1
时,它返回make: nothing to be done for p1
而且,当我尝试命令make p1 clean
时,它返回no rule to make p1 'clean.' Stop
这是我的makefile:
a.out: main.o P1LinkedList.o const_iterator.o iterator.o Node.o
g++ -std=c++11 main.o const_iterator.o iterator.o Node.o
main.o:
g++ -std=c++11 -c main.cpp
P1LinkedList.o:
g++ -std=c++11 -c P1LinkedList.cpp
iterator.o:
g++ -std=c++11 -c iterator.cpp
const_iterator.o:
g++ -std=c++11 -c const_iterator.cpp
Node.o:
g++ -std=c++11 -c Node.cpp
depend:
g++ -MM main.cpp > p1.dep
clean:
rm -f a.out *.o
要使makefile从.cpp文件中编译.o文件,我需要解决什么问题,如何使用clean命令解决该问题?
我们可能必须分阶段进行。
First,您似乎误解了makefile名称和target名称之间的区别。这似乎是您和老师之间的沟通不畅,但很容易清除。
假设您有一个名为“ Makefile”的makefile,其中包含以下内容:
foo:
@echo running the foo rule
bar:
@echo running the bar rule
如果您make foo
,您将获得:
running the foo rule
参数(foo
)告诉Make尝试建立哪个目标。以及Make如何知道要使用哪个makefile? (毕竟,您可能在工作目录中有十二个makefile。)您可以指定要使用的makefile,但是如果不这样做,则默认情况下,Make会查找名为Makefile
(或makefile
或[ C0],暂时不用担心。要指定其他名称的生成文件,例如“ Buildfile”,可以使用GNUmakefile
标志:
-f
因此“ p1”应该是target,的名称,而不是makefile。]。>在makefile中,将make -f Buildfile
规则重命名为a.out
。然后将整个makefile重命名为p1
。然后
Makefile
应该工作(或至少运行)。