Для знающих проблема известная и давно решённая, но я с этим столкнулся только сегодня.
Итак, у нас имеется небольшой проект на C/C++, который собирается с помощью make. Пусть это будет программа под названием «program». В Makefile написано примерно следующее:
Итак, у нас имеется небольшой проект на C/C++, который собирается с помощью make. Пусть это будет программа под названием «program». В Makefile написано примерно следующее:
OUT = program
CXXFLAGS = -Wall -c -O2
SRC = $(wildcard *.cpp)
# Expand SRC wildcard and replace extension from .cpp to .o
OBJ = $(patsubst %.cpp, %.o, $(SRC))
$(OUT): $(OBJ)
$(CXX) -o $(OUT) $(OBJ)
Когда мы изменяем какой-нибудь файл исходного кода foo.cpp и собираем проект, всё работает как часы: make замечает изменение foo.cpp, заново его (и только его) компилирует и запускает линковщик. Но make не замечает изменений в заголовочном файле foo.h, который подключается из foo.cpp.