В настоящее время я сталкиваюсь с проблемой использования gnu make, где у меня есть следующая настройка в make-файле: (только важные части)
all: bin/game
bin/game: obj/main.o
gcc -o bin/game obj/main.o
obj/main.o: src/main.cpp
gcc -c src/main.cpp -o obj/main.o
# Don't do anything, just make sure that library.hpp hasn't changed
src/main.cpp: include/library.hpp
# Don't do anything, just make sure that part1 and part2 haven't changed
include/library.hpp: include/library/part1.hpp\
include/library/part2.hpp
И в этой длинной спирали реквизитов, которая имеетгораздо больше объектных файлов, исходных файлов и файлов заголовков в реальном проекте, хотя он перестраивает bin/game
при обновлении src / main.cpp, когда я обновляю include/library/part1.hpp
, include/library/part2.hpp
или даже include/library.hpp
, это непересобрать bin/game
, даже если это зависит от него.
Это потому, что make игнорирует реквизиты src / main.cpp, потому что сам он не изменился?
Я заметил, что перемещение include/library.hpp
в реквизиты obj/main.o
решило эту конкретную проблему, хотя оно все равно не обновляется при изменении либо include/library/part1.hpp
, либо include/library/part2.hpp
.
Есть ли способ разделить рецепт на «уровни», как я делаю здесь, чтобы сделать вещи более организованными, вместо того, чтобы перечислить их все в цели?