я написал следующее Makefile:Make не модифицирует исполняемый файл
CC=g++
all: happy
happy: happy.o HappyLetter.o
$(CC) -o happy happy.o HappyLetter.o
happy.o: happy.cpp
$(CC) -c happy.cpp
HappyLetter.o: HappyLetter.cpp
$(CC) -c HappyLetter.cpp
clean:
rm -rf *.o happy
и работает с файлами HappyLetter.cpp и happy.cpp (который включает в себя бывший), чтобы создать исполняемый файл с именем счастливой.
Я могу построить код успешно используя make. Однако, когда я изменяю HappyLetter.cpp и снова набираю 'make', это изменение не отражается. Он работает только тогда, когда я печатаю «make clean», а затем «make». Обновление файла объекта, который я ожидаю иметь место вторит в командной строке:
$ make
g++ -c HappyLetter.cpp
g++ -o happy happy.o HappyLetter.o
Однако обновление HappyLetter.cpp не отражается в счастливой.
Проблема не работает в другом направлении. То есть, если я изменяю happy.cpp, изменение отражается сразу после ввода «make».
Я реплицировал эту проблему с тремя make-файлами на моем Mac OS X, а также на машине Ubuntu. Поэтому я должен делать что-то неправильно в кодировании. Вот текст из файлов, которые находятся в том же каталоге, что и Makefile:
happy.cpp
#include "HappyLetter.cpp"
int main()
{
printf("Hello from happy.cpp!\n");
HappyLetter *myObj = new HappyLetter();
myObj->speak();
return 0;
}
HappyLetter.cpp
#include <cstdio>
class HappyLetter {
public:
void speak()
{
printf("Hello from HappyLetter.cpp!\n");
}
};
Я считаю, что проблема что-то простое, но у меня нет больше идей о том, что проверить. Одно из предположений, которое я имею, заключается в том, что порядок правил и зависимостей не имеет значения.
Используйте [переделку] (http://bashdb.sourceforge.net/remake/) '' -x' или сделать - -trace'; также улучшите свой 'Makefile' как [здесь] (http://stackoverflow.com/a/20146082/841108); попробуйте также 'touch HappyLetter.cpp' перед повторным запуском' make' –
Вы должны * не * '#include" HappyLetter.cpp "' рядом с началом 'happy.cpp'; вы должны иметь заголовочный файл 'happy.h', иметь' #include "happy.h" 'как' HappyLetter.cpp', так и 'happy.cpp' и изменять свой' Makefile' –