具有调试模式的C++ Makefile配置

fhity93d  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(171)

我一直在尝试配置一个简单的makefile,我已经让它为一个文件main.ccp工作。我尝试完成的是让每个源文件在bin/rel/objbin/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
  • 文件树 *

任何帮助都将不胜感激!

4smxwvx5

4smxwvx51#

你不能使用目标特定变量来做你想做的事情。手册上很清楚的说明目标特定变量的值 * 只 * 在配方中可用。它们在目标和先决条件中不可用。这是因为在make真正尝试遍历依赖关系图并构建东西之前,它不知道目标特定变量应该是什么。并且它不能遍历依赖图,直到它构建了依赖图,并且依赖图中的节点是要构建的目标和先决条件......第二十二条军规。
最简单的方法是递归调用make,例如,将“标准”构建版本设置为rel,如果debug正在运行,则调用make递归覆盖该值:

BIN = ./bin/rel/

# standard compiler flags
CXXFLAGS_DBG =
CXXFLAGS = -Wall -std=c++17 $(CXXFLAGS_DBG)

...the rest of the makefile here...

# debug mode
debug:
        $(MAKE) BIN=./bin/deb/ CXXFLAGS_DBG='-DDEBUG -g'

当然还有其他方法,但递归调用是最直接的。

相关问题