我正在尋找一種方法來替換makefile中源文件變量列表中的文件夾。
在這裏有什麼工作嗎?
我開始通過尋找我的源文件
program_C_SRCS := $(wildcard $(SRCDIR)/*.c)
program_CXX_SRCS := $(wildcard $(SRCDIR)/*.cpp)
的結果(如果我理解正確的GNU makefile文件)看起來通常喜歡
的src/main.cpp的
的src/sensor.cpp
然後我建立目標文件
program_C_OBJS := ${program_C_SRCS:.c=.o}
program_CXX_OBJS := ${program_CXX_SRCS:.cpp=.opp}
這取代了我的源文件的擴展按預期。
最後,我想更換 「的src /」 與 「OBJ /」
program_C_OBJPATH := ${subst $(SRCDIR) , $(OBJDIR) , $(program_C_OBJS)}
program_CXX_OBJPATH := ${subst $(SRCDIR) , $(OBJDIR) , $(program_CXX_OBJS)}
但是,這是行不通的。
我已經通過GNU makefile網站無濟於事。此解決方案Makefile to put object files from source files different directories into a single, separate directory?接近,但對象目錄必須顯式包含在任何地方,並且sources目錄不包含源路徑信息。
在我的makefile中,源文件列表包含路徑,我更希望對象文件列表也包含相應的對象目錄。
生成文件的其餘部分也嘗試使用變量
連接階段
$(program_NAME): $(program_OBJS)
$(CXX) $(CFLAGS) $(CXXFLAGS) $(LDFLAGS) $(program_OBJS) -o "$(program_NAME)"
編譯階段
%.opp : %.cpp | mkdirobjdir
$(CXX) $(CFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -o "[email protected]" "$<"
終於規則
main_enose.opp : main_enose.cpp core_enose.cpp core_enose.h
$(OBJDIR)/core_enose.opp : core_enose.cpp core_enose.h
$(OBJDIR)/core_enose.h :
謝謝!這工作正常。但似乎稍後解決我的問題。會發生什麼是以下規則不起作用。 '$(program_name):$(program_OBJS)'。它說'make:***'制定目標的規則'obj_dbg/core_enose.opp','程序'需要。 Stop.'看起來鏈接規則是失敗的鏈接規則 – nass
你在哪裏定義了'obj_dbg/core_enose.opp'的規則?你沒有顯示你的makefile的那部分。 –
確實,請現在看看。我意識到現在規則不可能沒有路徑,所以我在它們前綴如下:'$(OBJDIR)/core_enose.opp:$(SRCDIR)/core_enose.cpp $(SRCDIR)/ core_enose.h'。但是這也失敗了。 – nass