Мне было интересно ...
Когда вы вносите изменения в file1.c
или file2.c
или file1.h
, следующий make-файл перекомпилирует только то, что нужно (что приятно)
# Link to executable
result: file1.o file2.o
gcc file1.o file2.o -o result23
# Assemble to .o object files
file1.o: file1.s
gcc -c dist/file1.s
file2.o: file2.s
gcc -c dist/file2.s
# Compile to .s assembly files
file1.s: file1.c
gcc -S file1.c
file2.s: file2.c
gcc -S file2.c
Однако, когда я перемещаю построенный объект в другой каталог, все перестраивается все время, независимо от того, было ли изменено содержимое только 1 файла.
# Link to executable
result: file1.o file2.o
gcc file1.o file2.o -o result23
# Assemble to .o object files
file1.o: file1.s
gcc -c dist/file1.s
mv file1.o dist
file2.o: file2.s
gcc -c dist/file2.s
mv file2.o dist
# Compile to .s assembly files
file1.s: file1.c
gcc -S file1.c
mv file1.s dist
file2.s: file2.c
gcc -S file2.c
mv file2.s dist
Похоже, это происходит потому, что make
не знает, где находятся файлы .o
в его среде.
С этим несколько вопросов:
- Может ли make иметь доступ к переменным окружения? Если да, не могли бы вы привести пример?
- Может ли быть сделано уведомление об инкрементных сборках, если каталог дистрибутива отличается от текущего каталога?