C++ Makefile表示该变量为空,但它不是

C++ Makefile表示该变量为空,但它不是,c++,makefile,C++,Makefile,我正在尝试创建包含以下内容的makefile: $(CXX)=g++ $(SRC)=../src $(INCL)=../include all: cpu ram temperature swap statusshooter $(CXX) main.cpp cpu.o ram.o temperature.o swap.o statusshooter.o -o main.o -I$(INCL) -Ofast -Wall -lyaml-cpp -lglog -lpqxx -lpq cpu:

我正在尝试创建包含以下内容的makefile:

$(CXX)=g++
$(SRC)=../src
$(INCL)=../include
all: cpu ram temperature swap statusshooter
    $(CXX) main.cpp cpu.o ram.o temperature.o swap.o statusshooter.o -o main.o -I$(INCL) -Ofast -Wall -lyaml-cpp -lglog -lpqxx -lpq
cpu:
    $(CXX) -c $(SRC)/CCpu.cpp -o cpu.o -Ofast -Wall 
ram:
    $(CXX) -c $(SRC)/CRam.cpp -o ram.o -Ofast -Wall 
temperature:
    $(CXX) -c $(SRC)/CTemperature.cpp -o temperature.o -Ofast -Wall
swap:
    $(CXX) -c $(SRC)/CSwap.cpp -o swap.o -Ofast -Wall  
statusshooter:
    $(CXX) -c $(SRC)/CStatusShooter.cpp -o statusshooter.o -Ofast -Wall  
使用以下命令执行该makefile: 使CXX=g++-4.7抛出以下错误:

makefile:2: *** empty variable name.  Stop.

如何解决这个问题?

要将值赋给变量write var=…,而不是$var=…,那么,在您的例子中, CXX=g++等。

语法$CXX用于计算make变量,而不是分配给它。你想要

CXX  = g++
SRC  = ../src
INCL = ../include

[...]

这可能会让人惊讶,但$var=。。。通常不会给出任何错误,它只是意味着一些你可能不希望它是什么意思。这个问题没有$var,它有$var,在makefile中,括号很重要$变量=。。。试图通过连接$v和ar来分配变量名,如果$v为空,则不成问题。@OverKiller[your]命令到底起了什么作用?你是说你运行make$CXX=g++4.7?因为这不应该起作用。如果没有接下来的两个变量,例如:$SRC和$INCL,makefile起作用$CXX=g++起作用,因为CXX变量有一个默认值,即g++,所以在替换变量变量后,行变为g++=g++,这是有效的,将g++变量设置为g++。然而,SRC和INCL没有默认值,因此$SRC=../SRC将变成=../SRC,这不是非常有效的Makefile语法