通过Makefile的预处理器宏定义在c ++中无法正常工作

时间:2018-01-23 21:55:38

标签: c++ makefile macros preprocessor

对于我的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

有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:0)

好像你错过了宏名称之前的空格

CPPFLAGS := -D custom_macro