0
Я пытаюсь увидеть автогенерируемую зависимость от Makefile ниже:Makefile
OBJS := main.o
run : $(OBJS)
$(CC) $(OBJS) -o run -lstdc++
-include $(OBJS:.o=.d)
%.o : %.cpp
$(CC) -c $(CFLAGS) $*.cpp -o $*.o
%.d : %.cpp
@set -e; rm -f [email protected]; \
$(CC) -M $(CPPFLAGS) $< > [email protected]$$$$; \
echo "creating dependency file."; \
sed 's,\($*\)\.o[ :]*,\1.o [email protected] : ,g' < [email protected]$$$$ > [email protected]; \
rm -f [email protected]$$$$
# remove compilation products
clean :
rm -f run *.o *.d*
Но Makefile генерировать огромный список зависимостей в main.d, но фактической необходимо первые несколько строк , Итак, где я ошибаюсь?
Что содержимое в 'main.d', что вы не думаете, принадлежат там? –
'main.o main.d: main.cpp main.h \ ** /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/ C++/4.4.7/iostream \ /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/x86_64-redhat- linux/bits/C++ config.h \ /usr/include/bits/wordsize.h \ /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../ ../include/c++/4.4.7/x86_64-redhat-linux/bits/os_defines.h \ /usr/include/features.h /usr/include/sys/cdefs.h \ ** ' В идеале это должно шоу только первая линия (** main.o main.d: main.cpp main.h **). Почему остальные строки идут, и ожидаемый результат был ** main.o: main.cpp main.h **? –
В вашем коде также содержатся некоторые из них (и они включают в себя другие заголовки). Предварительные требования не могут останавливаться на заголовочных файлах первого уровня или они будут пропускать вещи. Это '' '' буквальный? –