对于 makefiles 来说,我还是一个新手,因此我对此感到很陌生。我想知道是否有一种方法可以将另一个目录中的文件添加到 makefile
这是我想做的一个例子:
文件树:
Software
|____Lab_1
| |____hola.cpp
| |____hola.hpp
| |____hola.o
|
|___Lab_2
|____hey.cpp
|____hey.hpp
|____main.cpp
|____makefile
我的makefile当前如下所示:
INC_DIR = ../Lab_1
all: hola.o hey.o main.o
g++ hola.o hey.o main.o -o prog
point.o: hola.cpp hola.hpp
g++ -c hola.cpp
hey.o: hey.cpp hey.hpp
g++ -c hey.cpp
main.o: main.cpp
g++ -c main.cpp
我想使用Lab_2中的makefile中Lab_1的内容,有什么办法吗?
先谢谢您。
答案 0 :(得分:1)
将Makefile放在Software
目录下,并使用变量,函数,隐式规则和依赖项自动生成来简化您的任务:
TARGET := prog
SOURCE := $(wildcard Lab_1/*.cpp) $(wildcard Lab_2/*.cpp)
OBJECT := $(SOURCE:.cpp=.o)
DEPEND := $(OBJECT:.o=.d)
CPPFLAGS := -MMD -MP -ILab_1
.PHONY: all
all: $(TARGET)
$(TARGET): $(OBJECT)
$(CXX) -o $@ $^
-include $(DEPEND)
您是一个初学者,因此您需要学习更多以了解所有内容,但这是要点:
wildcard
函数将在两个.cpp
目录中列出所有扩展名为Lab
的文件。 SOURCE
将包含Lab_1/hola.cpp Lab_2/hey.cpp Lab_2/main.cpp
; OBJECT
包含相同内容,但扩展名已替换为.o
; DEPEND
包含相同内容,但扩展名已替换为.d
; CPPFLAGS
变量包含预处理器使用的标志。 -MMD -MP
标志指示g++
(包含在$(CXX)
中)生成.d
文件(依赖文件),并且-include
指令将包含它们,如果它们存在于文件系统; $@
和$^
是automatic variables;在这种情况下,$@ = $(TARGET)
和$^ = $(OBJECT)
。