如何使这项工作?它出错“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
答案 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
构造两次不太满意。我必须更加努力地想出一些可以避免这种情况的东西。