通过生成文件预处理器宏定义在 c++ 中无法正常工作

Preprocessor macro definition via a Makefile does not work properly in c++

本文关键字:常工作 工作 c++ 文件 预处理 宏定义 处理器      更新时间:2023-10-16

对于我的 c++ 代码,我需要一个将在编译期间定义的自定义处理器宏。根据我所读到的内容,我在以下Makefile中得出结论:

CC := g++ 
# Folders
SRCDIR := src
BUILDDIR := build
TARGETDIR := bin
# Targets
EXECUTABLE := app
TARGET := $(TARGETDIR)/$(EXECUTABLE)
SRCEXT := cpp
SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))
OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.o))
CFLAGS := -Dcustom_macro -g -c -Wall -std=c++14
INC := -I include
$(TARGET): $(OBJECTS)
    @echo " Linking..."
    $(CC) $^ -o $(TARGET) $(LIB)

$(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT)
    @mkdir -p $(BUILDDIR)
    $(CC) $(CFLAGS) $(INC) -c -o $@ $<

clean:
    @echo " Cleaning..."; 
    $(RM) -r $(BUILDDIR) $(TARGET)

构建成功,但是当我运行我的应用程序时,#ifdef custom_macro #endif 中的代码不会执行,而只是当我将其更改为 #ifndef 时。我也尝试设置 -Dcustom_macro=1,但我有相同的行为。我还尝试将其与CPPFLAGS宏插入如下:

CC := g++ 
# Folders
SRCDIR := src
BUILDDIR := build
TARGETDIR := bin
# Targets
EXECUTABLE := app
TARGET := $(TARGETDIR)/$(EXECUTABLE)
SRCEXT := cpp
SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))
OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.o))
CFLAGS := -g -c -Wall -std=c++14
CPPFLAGS := -Dcustom_macro
INC := -I include
$(TARGET): $(OBJECTS)
    @echo " Linking..."
    $(CC) $^ -o $(TARGET) $(LIB)

$(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT)
    @mkdir -p $(BUILDDIR)
    $(CC) $(CPPFLAGS) $(CFLAGS) $(INC) -c -o $@ $<

clean:
    @echo " Cleaning..."; 
    $(RM) -r $(BUILDDIR) $(TARGET)

但没有任何改变。根据编译器传递的参数是:
传递要 make 的参数如下:

 g++  -Dcustom_macro -g -c -Wall -std=c++14 -I include -c -o build/main.o src/main.cpp

有人知道我做错了什么吗?

似乎您错过了宏名称前的空格

CPPFLAGS := -D custom_macro