Makefile Can';不要在配方中分配变量

Makefile Can';不要在配方中分配变量,makefile,gnu-make,Makefile,Gnu Make,我该怎么做?它出错为“make:somevariable:Command not found” 完整示例: 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 $

我该怎么做?它出错为“make:somevariable:Command not found”

完整示例:

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

如果您像以前那样编写它,那么赋值将作为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 CXXFLAGS=-I/usr/include/test ifneq($(argsexec),真) CXXFLAGS+=-共享-fPIC DESTDIR=/home/pc 恩迪夫 OBJ=main.o Server.o 布拉布拉:$(OBJ) $(CXX)-o blabla$(OBJ)$(CXXFLAGS) ifneq($(argsexec),真) ./bn.sh 恩迪夫 这应该是您想要的,尽管我不太喜欢使用
ifneq
构造两次。我必须更努力地思考,才能想出一些可以避免这种情况的办法。

我找到了一个解决方案,方法是:

这是有效的:)

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


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

你找到更好的解决方案了吗?另请参见Pritesh:我现在在所有c/c++项目中都使用tup buildsystem。可能重复的 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
$(eval variablename=whatever)