那是不是做的最好的辦法,但如果你沿着這些路線去做,把它寫成一個shell的條件,不使用GNU使條件語句:
$(TMPDIRPATH)%.o: %.cpp
@echo compile $<
@if [ $(notdir $<) != main.cpp ]; \
then $(COMPILE.cpp) $(OUTPUT_OPTION) $<; \
fi
延續標記(反斜槓)是必要的。分號也是如此。在Shell被調用來解釋它們之前,前綴爲$
的值將被擴展make
。你可能不希望回聲在哪裏。您可能需要:
$(TMPDIRPATH)%.o: %.cpp
@if [ $(notdir $<) != main.cpp ]; \
then echo compile $<; \
$(COMPILE.cpp) $(OUTPUT_OPTION) $<; \
fi
我期望這樣做的方式是與要編譯的文件列表。使用任何通配符機制會導致在添加額外文件時出現問題 - 其他測試或不屬於系統的雜散文件。
的評論說, 「但GNU Make使用手冊說:ifneq
應該工作。」
ifneq
將工作,如果它被正確定位,這意味着'不作爲與規則相關的命令的一部分縮進'。你可以,因此,喜歡寫東西(一個令人吃驚壞的榜樣,但我的大腦的弗裏茨):
ifneq (${CFLAGS}, -Wall)
CFLAGS += -Wall
endif
file1.o: file1.c
${CC} ${CFLAGS} -c $<
但當ifneq
縮進作爲的問題,它只是其實並不是一個命令在make
運行shell來處理命令時在系統上找到。
它的工作原理。但我對「ifneq」業務感到十分困惑。它應該按照gnu make手冊工作。感謝您的提示。不幸的是,我不知道哪些文件是相關的,不能明確地指定它們。這不是我的項目。只是試圖振興許多月前的構建腳本。謝謝一堆。 – bioffe 2011-03-04 05:12:20
@bioffe:我試圖解釋答案中的額外信息。 – 2011-03-04 05:24:53
我想到了縮進方面,並在我的代碼中修復了它。它不會失敗,但總是評估爲真。剛剛幾分鐘前更新了這個問題。 – bioffe 2011-03-04 05:40:48