Makefile生成一些但不是全部.o文件

时间:2019-04-17 23:50:40

标签: makefile

我的makefile正在生成5/7 .o文件。知道为什么拒绝进入entry.o和productiondb.o吗?注意:文件中同时存在entry.cpp和production.cpp。

      asgmt01: showreport.o entry.o reporter.o productiondb.o stationdata.o yeardata.o resourcecount.o entry.h reporter.h productiondb.h stationdata.h yeardata.h resourcecount.h
           g++ showreport.o entry.o reporter.o productiondb.o stationdata.o yeardata.o resourcecount.o -g -Wall -o asgmt01

      entry.o:  entry.h

      reporter.o:  reporter.h

      productiondb.o:  productiondb.h

      stationdata.o:  stationdata.h

      yeardata.o:  yeardata.h

      resourcecount.o: resourcecount.h

      .PHONY: x
      x:           #cleanthe directory
           rm -f *.o asgmt01

应该编译,但我得到以下结果:

制作

g ++ -c -o showreport.o showreport.cpp

g ++ -c -o Reporter.o Reporter.cpp

g ++ -c -o stationdata.o stationdata.cpp

g ++ -c -o yeardata.o yeardata.cpp

g ++ -c -o resourcecount.o resourcecount.cpp

g ++ showreport.o entry.o记者.o productiondb.o stationdata.o yeardata.o        resourcecount.o -g -Wall -o asgmt01

g ++:错误:entry.o:没有这样的文件或目录

g ++:错误:productiondb.o:没有这样的文件或目录

make:*** [asgmt01]错误1

  update:

  asgmt01: productiondb.o stationdata.o yeardata.o resourcecount.o entry.o reporter.o showreport.o productiondb.h stationdata.h yeardata.h resourcecount.h entry.h reporter.h
        g++ productiondb.o stationdata.o yeardata.o resourcecount.o entry.o reporter.o showreport.o -g -Wall -o asgmt01
  productiondb.o:  productiondb.cpp productiondb.h
        g++ -g productiondb.cpp productiondb.h -o productiondb.o
  stationdata.o:  stationdata.cpp stationdata.h
        g++ -g stationdata.cpp stationdata.h -o stationdata.o
  yeardata.o:  yeardata.cpp yeardata.h
        g++ -g yeardata.cpp yeardata.h -o yeardata.o
  resourcecount.o: resourcecount.cpp resourcecount.h 
        g++ -g resourcecount.cpp resourcecount.h -o resourcecount.o
  entry.o:  entry.cpp entry.h
        g++ -g entry.cpp entry.h -o entry.o
  reporter.o:  reporter.cpp reporter.h
        g++ -g reporter.cpp reporter.h -o reporter.o
  showreport.o: showreport.cpp
        g++ -g showreport.cpp -o showreport.o
  .PHONY: x
  x:           #cleanthe directory
        rm -f *.o asgmt01

结果:

g ++ -g productiondb.cpp productiondb.h -o productiondb.o

/ usr / lib /../ lib64 / crt1.o:在“ _start”函数中:

/home/abuild/rpmbuild/BUILD/glibc-2.18/csu /../ sysdeps / x86_64 / start.S:118:未定义对“ main”的引用

/tmp/cc95fNHG.o:在函数“ productiondb :: productiondb()”中:

/home/student/matthew.cole3/cs261/production/productiondb.cpp:9:未定义对“ StationData :: StationData()”的引用

/home/student/matthew.cole3/cs261/production/productiondb.cpp:9:对“ StationData ::〜StationData()”的未定义引用

/tmp/cc95fNHG.o:在函数`productiondb ::〜productiondb()'中:

/home/student/matthew.cole3/cs261/production/productiondb.cpp:17:未定义对`StationData ::〜StationData()'的引用

/tmp/cc95fNHG.o:在函数`productiondb :: addData(entry const&)'中:

/home/student/matthew.cole3/cs261/production/productiondb.cpp:24:对“ StationData :: add(entry const&)”的未定义引用

/home/student/matthew.cole3/cs261/production/productiondb.cpp:27:对`StationData :: add(entry const&)'的未定义引用

/home/student/matthew.cole3/cs261/production/productiondb.cpp:30:对`StationData :: add(entry const&)'的未定义引用

/home/student/matthew.cole3/cs261/production/productiondb.cpp:33:未定义对“ StationData :: add(entry const&)”的引用

/home/student/matthew.cole3/cs261/production/productiondb.cpp:36:未定义对“ StationData :: add(entry const&)”的引用

/tmp/cc95fNHG.o:/home/student/matthew.cole3/cs261/production/productiondb.cpp:39:后面有更多对“ StationData :: add(entry const&)”的未定义引用

collect2:错误:ld返回1个退出状态

make:*** [productiondb.o]错误1

1 个答案:

答案 0 :(得分:1)

通常,Makefile的每个条目都应提供构建命令,如下所示:

entry.o: entry.cpp entry.h
    g++ -c $< -o $@

其中变量$<指向第一个输入entry.cpp$@引用输出名称entry.o;并且entry.h被列为附加依赖项,因此,如果entry.o中的任何一个更改,Make都会重建entry.{cpp,h}。 由于您的Makefile条目不完整,因此无法生成。