Хорошо, спасибо за объяснение автоматических переменных, теперь я понимаю, что это шаг вперед.
исал Makefile для компиляции программы openCV на OSX (более общий в системах Unix).
Код имеет заголовок с именемconstants.hpp
где определены некоторые константы.
Я хотел бы, чтобы Makefile перекомпилировал программу, когда этот заголовочный файл изменяется, потому что значения констант в нем изменяют поведение программы.
Мой Makefile следующий
CPP = g++
CPPFLAGS = -std=c++11
all: main.o
main.o: main.cpp
$(CPP) $^ $(CPPFLAGS) -o $@
В поисках я попытался определить послеCPPFLAGS
Значение:
DEPS = constants.hpp
а потом сmain.o
От этого зависит добавление зависимости следующим образом:
main.o: main.cpp $(DEPS)
$(CPP) $^ $(CPPFLAGS) -o $@
но я получаю ошибкуclang: error: cannot specify -o when generating multiple output files
.
Я пробовал такжеэтот ответ и пытался использовать еM
MM
флаги, но я что-то упустил.
Как заставить Makefile перекомпилироваться при изменении заголовочного файла?
РЕДАКТИРОВАТЬ: После комментариев к DevSolar мне пришлось полностью изменить вопрос, и он задал также исходный код. Поскольку я нашел здесь бесполезным копировать весь исходный код, я упростил его с помощью простой программы hello world.
Ниже приводитсяmain.cpp
:
#include<iostream>
#include"constants.hpp"
int main()
{
std::cout<<"Hello world, the value is: " << myValue <<"\n";
return 0;
}
и послеconstants.hpp
:
static const int myValue = 10;