0

以下是我使用的 Makefile。一切都很好,除了应该在 obj/ 目录中创建 .o 而不是。

请问我做错了什么?

在此处输入图像描述

确定之后

  • src 目录包含 a.cpp
  • 目标目录存在且为空
  • obj 目录存在且为空

什么时候make跑,我看到了

g++ -pedantic -Wall -c src/a.cpp  -o /Users/me/Dropbox/dev/c++/hott/obj/src/a.o

什么时候应该

g++ -pedantic -Wall -c src/a.cpp  -o /Users/me/Dropbox/dev/c++/hott/obj/a.o

请问我做错了什么?

更新pwd:硬编码路径并且不依赖分辨率时似乎没有任何改变

4

2 回答 2

1

如果你使用-o你必须指定文件名,而不仅仅是输出路径。尝试:

$(CC) $(FLAGS) $(SOURCES) $(OBJ)/$@

这个问题也可能有帮助:

此外,您可能想要调用类似的FLAGS东西CFLAGS,意思是“编译的标志”。


编辑

请注意,您没有有效地使用 make,因为您总是从 .cpp 文件重新编译所有 .o 文件。您应该改用Pattern Rule,以便 Make 可以有规则来仅构建必要的内容。(即“要从 .cpp 文件构建任何 .o 文件,请执行以下操作:___”) 

%.o : %.c
    $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@

您可以编辑它以包含$(OBJ)$@.

于 2012-08-08T03:22:53.723 回答
0

像这样使用时一切正常。乔纳森建议的一个小修改

在此处输入图像描述

于 2012-08-08T14:03:37.237 回答