Makefile GNU Make中通配符目标的正确方法
我正在尝试编写一个Makefile,将源文件和目标文件分开,但我似乎无法找到正确的方法来实现这一点。我有两种方法,但我希望有人能指出正确的方法 我的项目被分成一个Makefile GNU Make中通配符目标的正确方法,makefile,wildcard,gnu-make,target,Makefile,Wildcard,Gnu Make,Target,我正在尝试编写一个Makefile,将源文件和目标文件分开,但我似乎无法找到正确的方法来实现这一点。我有两种方法,但我希望有人能指出正确的方法 我的项目被分成一个src和obj文件夹,其中Makefile与这些文件夹处于同一级别 第一种方法使用通配符函数在src中查找源文件,然后使用文本替换来确定相应的目标文件 SRC = $(wildcard src/*.cpp) OBJ = $(SRC:.cpp=.o) prog: $(OBJ) $(CC) $(CFLAGS) $(LDFLA
src
和obj
文件夹,其中Makefile与这些文件夹处于同一级别
第一种方法使用通配符函数在src
中查找源文件,然后使用文本替换来确定相应的目标文件
SRC = $(wildcard src/*.cpp)
OBJ = $(SRC:.cpp=.o)
prog: $(OBJ)
$(CC) $(CFLAGS) $(LDFLAGS) $(LIBS) -o prog $(patsubst src/,obj/,$(OBJ))
%.o: %.cpp
$(CC) $(CFLAGS) -c $< -o $(COMPILE)/$(@F)
这消除了对象文件的重新编译,但要求我为prog
目标添加另一个变量POJB
(因为没有basedir,我无法仅对对象文件执行任何patsubst)
这两种方法都有效,而且每种方法都有各自的优势,但哪种方法是“正确的”方法?如果两者都不正确,那么实现这类建筑的正确方法是什么?您的第一个示例几乎就在这里:
SRC = $(wildcard src/*.cpp)
OBJ = $(patsubst src/%.cpp, obj/%.o, $(SRC))
prog: $(OBJ)
$(CC) $(CFLAGS) $(LDFLAGS) $(LIBS) $(OBJ) -o prog
obj/%.o: src/%.cpp
$(CC) $(CFLAGS) -c $< -o $@
SRC=$(通配符SRC/*.cpp)
OBJ=$(patsubst src/%.cpp,OBJ/%.o,$(src))
进度:$(OBJ)
$(CC)$(CFLAGS)$(LDFLAGS)$(LIBS)$(OBJ)-o程序
obj/%.o:src/%.cpp
$(CC)$(CFLAGS)-c$<-o$@
SRC=$(通配符SRC/***.cpp)
用于位于SRC
SRC = $(wildcard src/*.cpp)
OBJ = $(patsubst src/%.cpp, obj/%.o, $(SRC))
prog: $(OBJ)
$(CC) $(CFLAGS) $(LDFLAGS) $(LIBS) $(OBJ) -o prog
obj/%.o: src/%.cpp
$(CC) $(CFLAGS) -c $< -o $@