Makefile"无所事事"

时间:2015-10-11 08:22:11

标签: c++ makefile

我正在尝试使用以下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

但是当我跑步时,这只是说"没有什么可做的"。我有点困惑。根据我读过的教程,我无法弄清楚出了什么问题......

3 个答案:

答案 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 variablespattern rules

我将你的makefile修改为:

  1. 使用自动变量$@$<$^来引用规则输出和输入。
  2. 使用模式规则从.o构建.cpp
  3. 自动生成头文件依赖项。
  4. 添加了-Wall -Wextra编译器标志,以便在编译时为您检测更多错误。
  5. 使用LDFLAGS进行关联,而不是CFLAGS
  6. 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”。