【发布时间】:2019-08-11 09:30:36
【问题描述】:
make 在我的 Makefile 上工作异常。它给出错误“没有目标。停止”。当我写 make clean 时,它写道:“没有规则使目标干净。” 如果我分别编译每个文件,一切都很好。 下面是代码:
CC = g++
CFLAGS = -g -Wall
BOOSTIP = -I path/to/boost
default: abc
all: abc
abc: main.o node.o network.o my_funs.o my_random.o
$(CC) $(CFLAGS) $(BOOSTIP) main.o node.o network.o my_funs.o my_random.o -o abc
main.o: main.cpp node.hpp network.hpp
$(CC) $(CFLAGS) $(BOOSTIP) main.cpp -o main.o
node.o: node.cpp node.hpp my_funs.hpp my_random.hpp
$(CC) $(CFLAGS) $(BOOSTIP) node.cpp -o node.o
network.o: network.cpp network.hpp node.hpp my_funs.hpp my_random.hpp
$(CC) $(CFLAGS) $(BOOSTIP) network.cpp -o network.o
my_funs.o: my_funs.cpp my_funs.hpp node.hpp my_random.hpp
$(CC) $(CFLAGS) $(BOOSTIP) my_funs.cpp -o my_funs.o
my_random.o: my_random.cpp my_random.hpp
$(CC) $(CFLAGS) $(BOOSTIP) my_random.cpp -o my_random.o
clean:
rm abc *.o *~
【问题讨论】:
-
我在运行您的 makefile 时没有收到该错误。我不得不将每行开头的空格更改为制表符(我怀疑您也有,但他们只是没有在这里复制)。我得到“没有规则来制作目标 main.cpp”,如果我将 main.cpp 放在我的目录中应该没问题。你不需要 "default: abc" 因为 make 默认会运行第一个目标,所以 all 和 default 是一样的。
-
你使用什么版本的 Make?你试过一个非常简单的makefile吗?
-
@Flexo 我非常不同意删除我的帖子。事实上,我的回答完全正确。按照我给出的路线,这个问题得到了准确的回答。如果只是“查一下”,那就不合适了。但是,我给出了精确的指示以找到确切的答案。从该链接重复该部分是没有意义的。例如,那里的内容可能会改变。但是把读者指向它,是完全正确的。
-
@MarkGaleck:我同意 Flexo,我发现您的评论令人费解。您认为引用手册是没有意义的,因为手册可能会在以后进行修订,但是依赖当前 Google 排名的手册的方向更好??无论如何,手册的那部分并没有真正解释如何解决问题。我已经知道错误消息的含义,但我不知道为什么 Piotr Górski 会得到它。
-
感谢大家的帮助。我设法纠正了错误。这是 Windows/Unix 行结束的问题...我只有 CR,因为它应该是 LF。 @Beta:我设法编写了简单的makefile,它工作正常,这就是为什么我考虑可能的差异并检查了不可见的迹象。感谢您的想法!