以下是我使用的Makefile。一切都很好,除了.o应该在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
分辨率
答案 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)
这样使用时一切正常。乔纳森建议的一个小修改