2011-08-14 10 views
4

私は以下のメイクファイルを持っています。たとえば、make USE_44=1 USE_O=1を実行すると、次のエラーが表示されます。このMakefileに何が問題なのですか?

makefile:21: *** missing separatorであり、行21はelif ($(USE_S), 1)です。

私がmake USE_44=1を実行すると、それはうまくコンパイルされます。

ここで問題が何であるか教えてもらえますか?

USE_44 = 0 
USE_IO = 0 
USE_O = 0 
USE_S = 0 
USE_F = 0 
USE_I = 0 
USE_WL = 0 

ifeq ($(USE_44), 0) 
    CXX = g++ 
else 
    CXX = g++44 
endif 

CXXFILES = main.cpp jacobcalc.cpp linkup.cpp slave1.cpp jacobcalc2.cpp slave2.cpp laplacalc.cpp multi.cpp subblock.cpp replication.cpp hash.cpp 

CXXFLAGS := -std=c++0x -O3 -o 

ifeq ($(USE_O), 1) 
    CXXFLAGS += progo -DWITHOUT_LOCKS -DWITHOUT_BARRIERS -DWITHOUT_MPROTECT 
elif ($(USE_S), 1) 
    CXXFLAGS += progs -DWITHOUT_LOCKS -DWITHOUT_BARRIERS -DWITHOUT_MPROTECT -DSINGLE 
elif ($(USE_F), 1) 
    CXXFLAGS += progf -DNEGLECT_DET_LOCKS 
elif ($(USE_I), 1) 
    CXXFLAGS += progi -DWITH_INSTR 
elif ($(USE_WL), 1) 
    CXXFLAGS += progwl -DWITHOUT_LOCKS 
else 
    CXXFLAGS += prog 
endif 

ifeq ($(USE_IO), 1) 
    CXXFLAGS += -DWITHOUT_IO 
endif 

#CFLAGS := $(CFLAGS) -Wall -W -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wdisabled-optimization 
#CFLAGS := $(CFLAGS) -Wpadded -Winline -Wpointer-arith -Wsign-compare -Wendif-labels prog 
LIBS := -lm -lpthread 

all: 
    $(CXX) $(CXXFILES) $(LIBS) $(CXXFLAGS) 

clean: 
    rm -f prog* *.o 

答えて

12

make documentationには、条件を使用する正しい方法が概説されています。

conditional-directive 
    text-if-one-is-true 
    else conditional-directive 
    text-if-true 
    else 
    text-if-false 
    endif 

elifは認識されません。代わりにelse ifeq(...)と入力した場合は、それがすべて有効であるはずです。 GNUのためconditional syntaxドキュメントを作るに従って正しい構文をだ

ifeq ($(USE_O), 1) 
    ... 
else ifeq ($(USE_S), 1) 
    ... 
endif 

2

をしてみてください。

関連する問題