makefile автоматическое удаление .o файлов - PullRequest
8 голосов
/ 06 ноября 2011

Я прохожу курс C ++ в колледже, и они хотят, чтобы мы вручную набирали все тестовые файлы ... Однако я знаю, что есть способ сделать это без меня, так я и закончил текущий (http://pastebin.com/6d9UtKM4) make-файл. Мой вопрос: почему этот make-файл автоматически удаляет все файлы .o, которые он использует для компиляции, когда это сделано? Это не убивает меня, но я хотел бы чтобы сохранить .o файлы. Я вставил make-файл сюда (http://pastebin.com/6d9UtKM4). Я также вставил текущий результат запуска "make tests" здесь ( http://pastebin.com/h3Ny3dib). (Обратите внимание на часть внизу этой страницы, которая автоматически удаляет все файлы .o.)

Я бы также хотел, чтобы он генерировал его так:

  • g ++ -o compileDir / assemblyr.o -c -Wall src / assemblyr.cpp
  • g ++ -o compileDir / string.o -c -Wall src / string.cpp
  • g ++ -c -Wall -o compileDir / test_assignment.o testSrc / test_assignment.cpp
  • g ++ -o testDir / test_assignment compileDir / test_assignment.o compileDir / string.o compileDir / assemblyr.o
  • g ++ -c -Wall -o compileDir / test_bracket.o testSrc / test_bracket.cpp
  • g ++ -o testDir / test_bracket compileDir / test_bracket.o compileDir / string.o compileDir / assemblyr.o
  • testDir / test_bracket
  • testDir / test_assignment

Другими словами, я хочу, чтобы он все компилировал, а потом все запускал. Я надеюсь, что это не слишком много, чтобы спросить!

Редактировать: Дополнительная информация: (Это код, который "делает тесты")

tests: assembler.o string.o $(test_output) $(test_stringOutput)
        @echo '--- Testing complete ---'

$(testDir)%: $(compileDir)%.o string.o
        g++ -o $@ $< $(compileDir)string.o $(compileDir)assembler.o
        $@
        @echo ''

$(compileDir)%.o: $(testSourceDir)%.cpp
        g++ -c -Wall -o $@ $<

$(compileDir)%.o: $(testStringSrc)%.cpp
        g++ -c -Wall -o $@ $<

РЕДАКТИРОВАТЬ: -----------------------------------------

Решено с помощью комментариев:

Добавление этой строки исправило это: .PRECIOUS $ (compileDir)%. O

Ответы [ 2 ]

11 голосов
/ 06 ноября 2011

Вы можете добавить

.PRECIOUS: %.o

, что должно быть неявным, но, возможно, у вас странные настройки.

5 голосов
/ 06 ноября 2011

Make обрабатывает ваши .o файлы как промежуточные и удаляет их.Вы можете предотвратить автоматическое удаление этих объектов, добавив в них зависимость специальной цели .SECONDARY.См. Цепочки неявных правил для более подробной информации.Удачи!

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