Makefile有问题,需要澄清

时间:2012-08-08 03:20:43

标签: makefile

以下是我使用的Makefile。一切都很好,除了.o应该在obj /目录中创建,但事实并非如此。

请问我做错了什么?

enter image description here

确认后

  • 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分辨率

2 个答案:

答案 0 :(得分:1)

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

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

这个问题也许有帮助:

此外,您可能需要调用FLAGS之类的CFLAGS,意思是“编译标志”。


修改

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

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

您可以对其进行编辑,以便在$(OBJ)之前加入$@

答案 1 :(得分:0)

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

enter image description here