通用Makefile忽略变量

时间:2017-03-04 06:27:33

标签: c++ c++11 makefile

在此博客文章a simple c plus plus project structure之后设置了具有目录结构和Makefile样式的C ++项目。但是,在运行makefile的修改后的输出中,变量似乎没有通过编译过程携带值。

编辑(现在正在工作):Makefile

HOST_COMPILER := g++
SRCDIR := src
BUILDDIR := build
TARGET := bin/runner
SRCEXT := cc
SOURCES := $(shell find $(SRCDIR) -type f -name "*.$(SRCEXT)")
OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.o))

# internal flags
CXXFLAGS := -std=c++11 -Wall -g -fopenmp 
MAGICKFLAGS := `Magick++-config --cxxflags --cppflags --ldflags --libs`

INCLUDES := -I/usr/include/ImageMagick-6 
LIBRARIES := -L/usr/local/lib/  -lMagick++-6.Q16 -lMagick++

$(TARGET) : $(OBJECTS)
    $(HOST_COMPILER) $^ -o $(TARGET) $(LIBRARIES)

$(BUILDDIR)/%.o : $(SRCDIR)/%.$(SRCEXT)
    @mkdir -p $(BUILDDIR)
    $(HOST_COMPILER) $(CXXFLAGS) $(MAGICKFLAGS) $(INCLUDES) -c -o $@ $<

clean:
    rm -r $(BUILDDIR) $(TARGET)

回想起来,“$(”是这段代码中常见的一对符号,可以反映错误产生“($”,但makefile除外没有通知你这样的错误类型。所以只需搜索文档为“($”会发现错误。

1 个答案:

答案 0 :(得分:2)

你的makefile中有一个小问题! 替换这个:

OBJECTS := $(patsubst ($SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.o))

有了这个:

OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.o))