无法在配方内分配变量

时间:2011-06-29 10:33:05

标签: makefile gnu-make

如何使这项工作?它出错“make:somevariable:Command not found”

sometarget:
    somevariable = somevalue

完整示例:

CXXFLAGS = -I/usr/include/test -shared -fPIC

OBJ = main.o Server.o

blabla : $(OBJ) 
ifeq ($(argsexec),true) 
    # Creates an executable
    CXXFLAGS = -I/usr/include/test
    $(CXX) -o blabla $(OBJ) $(CXXFLAGS) 
else 
    # Creates a library
    DESTDIR = /home/pc
    $(CXX) -o blabla $(OBJ) $(CXXFLAGS) 
    ./bn.sh
endif

2 个答案:

答案 0 :(得分:60)

我找到了使用the eval function的解决方案:

$(eval variablename=whatever)

这有效:)

(虽然我现在可能会尝试找到一个更简单的构建系统;))

感谢大家阅读,当然也感谢@eriktous写作!

答案 1 :(得分:3)

如果你像你一样编写它,那么赋值将作为shell命令执行,它会给出你得到的错误。

我会尝试组织这样的事情:

CXXFLAGS = -I/usr/include/test
ifneq ($(argsexec),true) 
  CXXFLAGS += -shared -fPIC
  DESTDIR = /home/pc
endif

OBJ = main.o Server.o

blabla : $(OBJ) 
    $(CXX) -o blabla $(OBJ) $(CXXFLAGS) 
ifneq ($(argsexec),true) 
    ./bn.sh
endif

这应该可以做你想要的,虽然我对使用ifneq构造两次不太满意。我必须更加努力地想出一些可以避免这种情况的东西。