不同文件夹上的 Makefile
Makefile on different folders
我知道已经讨论了很多,但我有点疯狂,无法自己弄清楚。
我正在尝试学习如何创建 makefile,但在为不同文件夹中的文件定义 makefile 时遇到问题。
编译后我想得到的是:
/makefile
/test.exe
/src/factorials.cpp
/src/main.cpp
/src/hello.cpp
/obj/factorials.o
/obj/main.o
/obj/hello.o
/include/functions.h
这个 makefile 有什么问题?
C++ = g++
FILENAME = test
SOURCES_PATH = src/
SRC = $(SOURCES_PATH)factorial.cpp $(SOURCES_PATH)main.cpp $(SOURCES_PATH)hello.cpp
OBJ = factorial.o main.o hello.o
all: test.exe
test.exe: $(OBJ)
$(C++) $(OBJ) -o $(FILENAME) -Iinclude
%.o:
$(C++) -c $(SOURCES_PATH)$*.cpp -Iinclude
clean:
rm -f test.exe
一切正常,但在尝试编译时出现错误 src/all.cpp
。此外,我不知道如何告诉 g++ 将 .o 文件放入 obj/
文件夹。
非常感谢!
您应该按如下方式修正 .o
规则
obj/%.o: $(SOURCES_PATH)/%.cpp
$(CC) $(CXXFLAGS) $< -o $@
或者,$(vpath)
可用于解决 make
在何处查找目标的源(先决条件)文件:
vpath += $(SOURCES_PATH)
obj/%.o: %.cpp
$(CC) $(CXXFLAGS) $< -o $@
所以我似乎能够通过使用以下 makefile
获得结果
C++ = g++
FILENAME = test
OBJS = obj/factorial.o obj/hello.o obj/main.o
INC = -Iinclude/
vpath+= src
$(FILENAME): $(OBJS)
$(C++) $(OBJS) -o $@ $(INC)
obj/%.o: %.cpp
$(C++) -o $@ -c $< $(INC)
all: $(FILENAME)
clean:
rm -rf objs/*.o *~ $(FILENAME).exe
谢谢! :)
我知道已经讨论了很多,但我有点疯狂,无法自己弄清楚。
我正在尝试学习如何创建 makefile,但在为不同文件夹中的文件定义 makefile 时遇到问题。
编译后我想得到的是:
/makefile
/test.exe
/src/factorials.cpp
/src/main.cpp
/src/hello.cpp
/obj/factorials.o
/obj/main.o
/obj/hello.o
/include/functions.h
这个 makefile 有什么问题?
C++ = g++
FILENAME = test
SOURCES_PATH = src/
SRC = $(SOURCES_PATH)factorial.cpp $(SOURCES_PATH)main.cpp $(SOURCES_PATH)hello.cpp
OBJ = factorial.o main.o hello.o
all: test.exe
test.exe: $(OBJ)
$(C++) $(OBJ) -o $(FILENAME) -Iinclude
%.o:
$(C++) -c $(SOURCES_PATH)$*.cpp -Iinclude
clean:
rm -f test.exe
一切正常,但在尝试编译时出现错误 src/all.cpp
。此外,我不知道如何告诉 g++ 将 .o 文件放入 obj/
文件夹。
非常感谢!
您应该按如下方式修正 .o
规则
obj/%.o: $(SOURCES_PATH)/%.cpp
$(CC) $(CXXFLAGS) $< -o $@
或者,$(vpath)
可用于解决 make
在何处查找目标的源(先决条件)文件:
vpath += $(SOURCES_PATH)
obj/%.o: %.cpp
$(CC) $(CXXFLAGS) $< -o $@
所以我似乎能够通过使用以下 makefile
获得结果C++ = g++
FILENAME = test
OBJS = obj/factorial.o obj/hello.o obj/main.o
INC = -Iinclude/
vpath+= src
$(FILENAME): $(OBJS)
$(C++) $(OBJS) -o $@ $(INC)
obj/%.o: %.cpp
$(C++) -o $@ -c $< $(INC)
all: $(FILENAME)
clean:
rm -rf objs/*.o *~ $(FILENAME).exe
谢谢! :)