我正在尝试使用以下make文件编译c ++ ...
CC = g++
CFLAGS = -g -O2
OBJECTS = WavFileTool.o WavFile.o
WavFileTool.exe : $(OBJECTS)
$(CC) $(CFLAGS) $(OBJECTS) -o wavfiletool.exe
WavFileTool.o : WavFileTool.cpp
$(CC) $(CFLAGS) -c WavFileTool.cpp
WavFile.o : WavFile.cpp
$(CC) $(CFLAGS) -c WavFile.cpp
但是当我跑步时,这只是说"没有什么可做的"。我有点困惑。根据我读过的教程,我无法弄清楚出了什么问题......
答案 0 :(得分:1)
这很可能是由于您使用了不区分大小写的文件系统,并且您不匹配make文件中文件名的大小写。尝试将第一条规则更改为:
WavFileTool.exe : $(OBJECTS)
$(CC) $(CFLAGS) $(OBJECTS) -o WavFileTool.exe
如果您没有区分大小写的文件系统,那么无论是否更新源,您都可能会遇到WavFileTool.exe每次都重建的问题。
当然还有第三种可能性,即您正在使用文件敏感文件系统并且同时具有wavfiletool.exe文件和 WavFileTool.exe文件(其中WavFileTool.exe比任何文件都要新)来源)。我不认为Windows会允许这样做(而且我认为你会发现这很奇怪)。
答案 1 :(得分:0)
正如@skyking所解释的那样,您正在观察此问题,因为您必须多次键入相同的文件名并犯了错误。
为了防止由于必须多次输入相同的内容而造成的这类错误,make automatic variables和pattern rules。
我将你的makefile修改为:
$@
,$<
和$^
来引用规则输出和输入。.o
构建.cpp
。-Wall -Wextra
编译器标志,以便在编译时为您检测更多错误。LDFLAGS
进行关联,而不是CFLAGS
。CC = g++
LDFLAGS = -g
CFLAGS = -Wall -Wextra -g -O2
OBJECTS = WavFileTool.o WavFile.o
WavFileTool.exe : $(OBJECTS)
$(CC) -o $@ $(LDFLAGS) $^
%.o : %.cpp
$(CC) -o $@ $(CFLAGS) -MP -MD -c $<
-include $(OBJECTS:%.o=%.d)
答案 2 :(得分:0)
我找到了解决问题的方法。
我在奔跑......
make [my unique makefile name]
当我将文件重命名为“makefile”时解决了问题,并且只是命令“make”。