Makefile производит некоторые, но не все .o файлы - PullRequest
0 голосов
/ 18 апреля 2019

Мой make-файл производит файлы 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

Должен компилироваться, но я получаю такой результат:

make

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 reporter.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: error: ld вернул 1 состояние выхода

make: *** [productiondb.o] Ошибка 1

1 Ответ

1 голос
/ 18 апреля 2019

Канонически каждая запись файла Makefile должна содержать команду сборки, например:

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

, где переменная $< относится к первому входу, entry.cpp;$@ относится к имени выхода, entry.oentry.h указан как дополнительная зависимость, поэтому Make перестроит entry.o, если изменится либо entry.{cpp,h}.Поскольку ваши записи в Makefile являются неполными, они не собираются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...