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