我有一個用於C項目的Makefile。我有一個目錄中的src,這個目錄在src的子目錄中有一些源代碼。包含在包含目錄src中。C makefile RE:建立依賴關係以在各自目錄中正確查找對象
在Makefile中,我用下面生成的.C源文件的依賴性信息:
%.o: %.c
CFLAGS="$(CFLAGS)"
$(CC) -c $(CFLAGS) $(STACK_OPTS) $(SIO_FLAGS) $(IO_FLAGS) $(LOCAL_INCLUDES) -DSYNC_WRITE $<
$(CC) -MM $(CFLAGS) $(LOCAL_INCLUDES) $^ > $*.d
@cp -f $*.d $*.d.tmp
@sed -e 's/.*://' -e 's/\\$$//' < $*.d.tmp | fmt -1 | \
sed -e 's/^ *//' -e 's/$$/:/' >> $*.d
@rm -f $*.d.tmp
這工作得很好......但是,我發現是,這些源文件在src的子目錄中,它們的.d和.o文件存放在主src目錄INSTEAD中,讓它們放入源文件所在的目錄中。
我已經玩過宏$(< D),試圖存儲對象(.o)和依賴項文件(.d),將目錄名添加到它們應該在的位置,但是當鏈接階段發生時,它不是找不到這個目錄中的文件。
我有一個名爲VPATH的目錄。
關於我在這裏失蹤的想法?
希望我知道如何幫助你。 「Make」對我來說是一種黑色藝術。一個建議:任何時候我不得不用'make'做些什麼,它總是幫助我正確地知道**如何使'gcc'按照我想要從命令行首先執行的操作。然後我在makefile上工作。祝你好運。 – kmort
好的,進度,我用vpath(小寫)指定在哪裏查找源文件,包括AND已忘記包含一個單獨的目標文件組:使用: -include $(MYOBJS:.o = .d) 現在,它發現它實際存在的東西... 在鏈接階段gcc沒有找到子目錄中的對象...所以...有沒有一個vpath相當於?我想這裏應該發生什麼是對象文件應該重寫時,該對象實際上是在一個子目錄中找到。 – user3053087
我相信問題是在TARGETS構建規則中使用自動var $ ^。有沒有一些魔術讓巫術在這裏強制它查看vpath目錄中對象文件實際的位置? – user3053087