【问题标题】:makefile cant find .o filesmakefile 找不到 .o 文件
【发布时间】:2015-04-18 05:54:58
【问题描述】:

我对制作文件非常陌生,但是在查看了一堆来源后,我无法找出为什么我的制作文件无法正常工作,它适用于 C++,如下所述。

CC=g++
CFLAGS=-g -Wall -pedantic -ansi
SOURCES=commercial.cpp comRentals.cpp comSales.cpp property.cpp rentals.cpp residential.cpp resRentals.cpp resSales.cpp sales.cpp testPropertyA.cpp utility1.cpp
OBJECTS=$(SOURCES:.cpp=.o)
TARGET = runme

all: $(TARGET)

$(TARGET): $(OBJECTS) 
    $(CC) $(CFLAGS) -o $(TARGET) $(OBJECTS)

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

.PHONY: clean
clean:
    -del $(OBJECTS) $(TARGET).exe

从 Windows 7 命令行运行时,它不断说以下内容

C:\Users\Stat Phantom\Desktop\UNIVERSITY\C++\Assignment1\StartUpCode\TaskA>make
g++ -g -Wall -pedantic -ansi -c commercial.cpp -o commercial.o
process_begin: CreateProcess(NULL, g++ -g -Wall -pedantic -ansi -c commercial.cp
p -o commercial.o, ...) failed.
make (e=2): The system cannot find the file specified.
make: *** [commercial.o] Error 2

不知道这里发生了什么,请帮忙,这可能很简单。

更新:删除了包含的标签并将 $@ 添加到 .cpp.o:但是发生了同样的错误

【问题讨论】:

  • 您不应将头文件传递给编译器调用,而应将它们与#include "xxx.h"一起使用
  • 我在我的 .cpp 文件中这样做,我看到的参考文件在 make 文件中有它们
  • 通常你让编译器创建一个依赖文件 (.d) 列出使用 -MM 选项系列的头文件,并将这个包含在你的 makefile 中,以捕获由于头文件的变化而需要的重新编译.
  • 有必要吗?如果是这样会解决这个问题
  • “有必要吗?” 是的,如果你不想惊讶,为什么你的东西在发生变化时没有重新编译。如前所述,您应该删除此INCLUDES=$(SOURCES:.cpp=.h),并将其从编译器调用中移除。

标签: c++ object makefile


【解决方案1】:

-o后面需要指定输出文件名:

替换这个:

.cpp.o:
    $(CC) $(CFLAGS) $(INCLUDES) -c $< -o

用这个:

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

注意:$(INCLUDES) 也需要删除。

编辑: 经过进一步检查,实际问题似乎只是因为 OP 没有安装 g++。相关答案可在另一个 SO 问题中找到:Compiling Small Gcc Project on Windows Using MinGW

【讨论】:

  • 谢谢,我在安装 code::blocks 时确实安装了一个,但我猜它没有完全安装
猜你喜欢
  • 1970-01-01
  • 2013-10-15
  • 2015-10-11
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 2013-08-17
相关资源
最近更新 更多