我一直在尝试配置一个简单的makefile,我已经让它为一个文件main.ccp
工作。我尝试完成的是让每个源文件在bin/rel/obj
或bin/deb/obj
(标准和调试模式)下生成一个目标文件。但是,我不想为每个添加到源文件中的新文件键入这些指令。是否有办法让此设置工作,但是对于src目录中的所有文件?。我已经做了一段时间了,似乎不能得到它的权利。
# GNU make 4.3 for Win32
# compiler
CXX=g++
# base directories
SRC=./src/
BIN=./bin/rel/
# standard compiler flags
CXXFLAGS= -Wall -std=c++17
# debug mode arguments
debug: BIN=./bin/deb/
debug: CXXFLAGS += -DDEBUG -g
# object directory inside the rel or deb directory
OBJ=$(BIN)obj/
# build main depending on main.o
main: main.o
$(CXX) $(CXXFLAGS) $(OBJ)main.o -o $(BIN)main
# build main.o into the target bin dir
main.o:
$(CXX) -c $(SRC)main.cpp -o $(BIN)main.o
# debug target
debug: main.o main
- 文件树 *
任何帮助都将不胜感激!
1条答案
按热度按时间4smxwvx51#
你不能使用目标特定变量来做你想做的事情。手册上很清楚的说明目标特定变量的值 * 只 * 在配方中可用。它们在目标和先决条件中不可用。这是因为在make真正尝试遍历依赖关系图并构建东西之前,它不知道目标特定变量应该是什么。并且它不能遍历依赖图,直到它构建了依赖图,并且依赖图中的节点是要构建的目标和先决条件......第二十二条军规。
最简单的方法是递归调用make,例如,将“标准”构建版本设置为
rel
,如果debug
正在运行,则调用make递归覆盖该值:当然还有其他方法,但递归调用是最直接的。