为什么此makefile中没有编译标志?

为什么此makefile中没有编译标志?,makefile,Makefile,我在makefile上读这篇文章。我发现我找不到编译器和编译标志的定义位置。通常,它们被定义为CXX和CFLAG 我为自己的测试项目复制了此生成文件: BUILD_DIR := /home/ubuntu/workspace/common/bin vpath %.cpp /home/ubuntu/workspace/common/src SRCS := basic_types.cpp OBJS := ${SRCS:%.cpp=${BUILD_DIR}/%.o} foo: ${OBJS}

我在makefile上读这篇文章。我发现我找不到编译器和编译标志的定义位置。通常,它们被定义为CXX和CFLAG

我为自己的测试项目复制了此生成文件:

BUILD_DIR := /home/ubuntu/workspace/common/bin

vpath %.cpp /home/ubuntu/workspace/common/src

SRCS := basic_types.cpp

OBJS := ${SRCS:%.cpp=${BUILD_DIR}/%.o}  
foo: ${OBJS}
        @echo Linking $@ using $?
        @touch $@

${BUILD_DIR}/%.o: %.cpp      # <-- I had thought there will be some more specific 'rules' here
        @mkdir -p $(dir $@)
        @echo Compiling $< ...
        @touch $@

${SRCS}:
        @echo Creating $@
        @mkdir -p $(dir $@)
        @touch $@

.PHONY: clean
BUILD_DIR:=/home/ubuntu/workspace/common/bin
vpath%.cpp/home/ubuntu/workspace/common/src
SRCS:=基本类型.cpp
OBJS:=${SRCS:%.cpp=${BUILD_DIR}/%.o}
foo:${OBJS}
@回显链接$@是否使用$?
@触碰$@

${BUILD_DIR}/%.o:%.cpp#您的问题有点不清楚,因为您为对象文件编写了一条规则,但实际上并不编译任何内容,但您说“它编译得很好”

有一条隐式规则的作用如下:

%.o: %.cpp
    $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@
CXX = g++

但是
g++
已经是
CXX

的默认值,似乎没有任何设置,但这本身不是问题。他们可能没有任何需要指定的内容,或者,因为他们超出了范围,他们可能只是没有费心将其包括在内。你真正的问题是什么?你的意思是你想要一个在GNUMake的隐式规则中使用的预定义变量列表,以及它们的默认值吗?谢谢大家。我已经重新调整了我的问题,但是这个makefile中没有CXX,对吗?你是说make隐式地将CXX放入规则中?make不会将CXX放入您编写的规则中。如果您为
${BUILD_DIR}/%.o
编写了一个规则,并且希望它有一个调用编译器的命令,那么您必须自己将该命令放入规则中。