我有一套我想編譯的.cpp文件。這些.cpp文件位於分層目錄結構中。我希望相應的.o文件都以一個構建文件夾結束。Makefile動態規則w /沒有GNU-make模式
這裏是我如何獲得GNU使枚舉文件...
SRCS = \
$(wildcard $(CODE)/**/*.cpp) \
$(wildcard $(CODE)/AlgebraLibraries/**/*.cpp) \
$(wildcard $(CODE)/Calculator/Environments/**/*.cpp)
BARE_SRCS = $(notdir $(SRCS))
BARE_OBJS = $(BARE_SRCS:.cpp=.o)
OBJS = $(addprefix $(BUILD)/, $(BARE_OBJS))
這樣做之後,我不知道如何創建,將創建從.cpp文件.o文件的規則。直覺上,我想要做的是以下僞代碼。
for i=0, N do # <-- a for-loop!
$(OBJS)[i]: $(SRCS)[i] # <-- the rule!
$(CPP) -c $(SRCS)[i] -o $(OBJS)[i] # <-- the recipe
end
當然,這不是有效的GNU使代碼,但我希望你明白它是什麼在這裏,我想要做的事。以下將無法使用。
%.o: %.cpp
$(CPP) -c $< -o [email protected]
這不起作用,因爲GNU make會匹配%符號,假設.o文件位於.cpp文件的旁邊。
我所知道的所有這些方法的替代方法都是可行的,但是會非常單調乏味,它將所有規則列舉爲明確的規則。這是遲緩的!一定有更好的方法。
我一直在研究GNU make生成規則的能力,但似乎沒有辦法沒有內置邏輯來做。如果我能利用一些流程控制語句來生成我想要制定的規則,那將是非常好的。這是否要求太多的GNU-make?
無論如何,有沒有辦法做到我正在試圖用GNU make做什麼?如果是這樣,怎麼樣?
謝謝你的幫助!
會不會gcc的抱怨,如果它是試圖爲'dir1/dir2/file.c'創建'$(BUILD)/ dir1/dir2/file.o',因爲目錄結構'$(BUILD)/ dir1/dir2'不存在? – Tuxdude 2013-03-02 02:42:57
謝謝,謝謝! (http://www.gnu.org/software/make/manual/make.html#Eval-Function) - 我將閱讀更多關於這個,看看我是否可以使用它。我認爲這就是我正在尋找的...一種抽象make-file語法的方法。順便說一句,即使我不應該嘗試去做我在我的情況下所做的事情,但我確信在其他情況下,我試圖做的事至少是合法的。我也開始考慮果醬,但我不喜歡沒有人支持它的事實。 – user2125275 2013-03-02 05:51:34
這工作,順便說一句。再次感謝!我的makefile看起來相當隱祕,但它至少可以作爲一些可以在make中完成的東西的例子。 – user2125275 2013-03-02 06:51:40