Я написал makefile для своего мини-проекта с gedit. , когда я запускаю «make», все * .o и исполняемые файлы созданы. После того, как я изменил один из моих файлов (без make clean или make -B) , он снова скомпилирует файл chaneged и снова свяжет все объекты. Но исполняемый файл работает так, как будто ничего не меняется. (после того, как «сделать -B» исполняемый файл запуск ок)Whats worng с файлом формата make
CC = g++
CFLAGS = -Wall
OBJS = pawn.o knight.o bishop.o rook.o queen.o king.o board.o
movement.o game.o
all: ex1
ex1: $(OBJS)
$(CC) $(CFLAGS) $(OBJS) -o ex1
pawn.o: chess/tools/pawn.cpp chess/tools/tool.hpp
$(CC) $(CFLAGS) -c chess/tools/pawn.cpp
knight.o: chess/tools/knight.cpp chess/tools/tool.hpp
$(CC) $(CFLAGS) -c chess/tools/knight.cpp
bishop.o: chess/tools/bishop.cpp chess/tools/tool.hpp
$(CC) $(CFLAGS) -c chess/tools/bishop.cpp
rook.o: chess/tools/rook.cpp chess/tools/tool.hpp
$(CC) $(CFLAGS) -c chess/tools/rook.cpp
queen.o: chess/tools/queen.cpp chess/tools/tool.hpp
$(CC) $(CFLAGS) -c chess/tools/queen.cpp
king.o: chess/tools/king.cpp chess/tools/tool.hpp
$(CC) $(CFLAGS) -c chess/tools/king.cpp
board.o: chess/board.cpp chess/board.hpp
$(CC) $(CFLAGS) -c chess/board.cpp
movement.o: chess/movement.cpp
$(CC) $(CFLAGS) -c chess/movement.cpp
game.o: chess/game.cpp
$(CC) $(CFLAGS) -c chess/game.cpp
clean:
rm *.o
Если есть другая проблема или предложение с конструкцией файла макияжа, я буду рад услышать об этом.
Редактировать1) Программа не печатает ничего на экране. 2) Изменение в king.cpp файл (находится в другой папке) Печать Печать Переключаю на экране
[[email protected] chess]$ ls
chess ex1 Makefile
[[email protected] chess]$ ls chess
board.cpp board.hpp game.cpp movement.cpp tools
[[email protected] chess]$ ls chess/tools
bishop.cpp king.cpp knight.cpp pawn.cpp queen.cpp rook.cpp tool.hpp
[[email protected] chess]$ make
g++ -Wall -c chess/tools/pawn.cpp
g++ -Wall -c chess/tools/knight.cpp
g++ -Wall -c chess/tools/bishop.cpp
g++ -Wall -c chess/tools/rook.cpp
g++ -Wall -c chess/tools/queen.cpp
g++ -Wall -c chess/tools/king.cpp
g++ -Wall -c chess/board.cpp
g++ -Wall -c chess/movement.cpp
g++ -Wall -c chess/game.cpp
g++ -Wall pawn.o knight.o bishop.o rook.o queen.o king.o board.o movement.o game.o -o ex1
[[email protected] chess]$ ./ex1
[[email protected] chess]$ *** AT this stage i change the file
[[email protected] chess]$
[[email protected] chess]$ make
g++ -Wall -c chess/tools/king.cpp
g++ -Wall pawn.o knight.o bishop.o rook.o queen.o king.o board.o movement.o game.o -o ex1
[[email protected] chess]$ ./ex1
[[email protected] chess]$
[[email protected] chess]$ make -B
g++ -Wall -c chess/tools/pawn.cpp
g++ -Wall -c chess/tools/knight.cpp
g++ -Wall -c chess/tools/bishop.cpp
g++ -Wall -c chess/tools/rook.cpp
g++ -Wall -c chess/tools/queen.cpp
g++ -Wall -c chess/tools/king.cpp
g++ -Wall -c chess/board.cpp
g++ -Wall -c chess/movement.cpp
g++ -Wall -c chess/game.cpp
g++ -Wall pawn.o knight.o bishop.o rook.o queen.o king.o board.o movement.o game.o -o ex1
[[email protected] chess]$ ./ex1
Print Change
[[email protected] chess]$
Чтобы уточнить, если вы изменили исходный файл и запустили 'make', объектный файл будет построен, но исполняемый' ex1' не будет повторно использован? Можете ли вы, возможно, скопировать-вставить вывод 'make' в свой вопрос, чтобы мы могли видеть его выход? Как вы используете свое приложение? Вы меняете каталоги в любое время при создании или до запуска вашей программы? –
В отсутствие флага '-o' для' $ (CC) ', объектные файлы создаются рядом с источниками. Итак, скажем, вы меняете 'chess/tools/king.cpp' и говорите' make', тогда вы получите новый 'chess/tools/king.o'. Но 'ex1' хочет связать с' king.o', а не 'chess/tools/king.o'. Что не объясняет, почему 'make -B' помогает, но, возможно, я чего-то не хватает? –
Вы сохраняете файл с изменениями перед компиляцией? –