2014-01-08 2 views
0

Я новичок в Mac OS и хочу выполнить следующую программу makefile.Команда Makefile на Mac OS показывает неправильный вывод

GCCBASE = $(GCMDIR)/where/cplusplus/gcc 
SRCS:=$(wildcard *.cpp) program.cpp 
OBJS:=$(SRCS:.cpp=$(OBJDIR).o) 
INCLUDES:=-I. -I$(ADD_INCLUDES)/Auto*.h -I$(ADD_INCLUDES)/program.h 
OUTBASE =$(OUTBASE_EX) 
OUT_ARTIFACT=Program 

ifeq ($(OSNAME),Linux) 
    ifeq ($(GFLIB_MODEL),64bit) 
      CXXEXTRA_FLAGS = -m64 
      GCCDIR = $(GCCBASE)/linux64/4.5.3 
      GCCLIBDIR_W = $(GCCBASE)/linux64/4.5.3/lib64 
      GCCLIBDIR = $(GCCLIBDIR_W)     
      CFLAGS_common += -I$(GCCBASE)/linux64/4.5.3/include 
      OUTDIR = $(OUTBASE)/64 
      CFLAGS_link_libs = -L$(GCCLIBDIR) -lmyLib     
    else 
      CXXEXTRA_FLAGS = -m32 
      GCCDIR = $(GCCBASE)/linux/4.5.3 
      GCCLIBDIR_W = $(GCCBASE)/linux/4.5.3/lib 
      GCCLIBDIR = $(GCCLIBDIR_W) 
      CFLAGS_common += -I$(GCCBASE)/linux/4.5.3/include 
      OUTDIR = $(OUTBASE)/32 
    CFLAGS_link_libs = -L$(GCCLIBDIR) -lmyLib     
endif 
endif 
ifeq ($(OSNAME),Darwin) 
echo "Mac OS" 
    ifeq ($(GFLIB_MODEL),64bit) 
      CXXEXTRA_FLAGS = -m64 
      GCCDIR = $(GCCBASE)/macosx/4.8.1 
      GCCLIBDIR_W = $(GCCBASE)/macosx/4.8.1/lib 
      GCCLIBDIR = $(GCCLIBDIR_W)    
      CFLAGS_common += -I$(GCCBASE)/macosx/4.8.1/include 
      OUTDIR = $(OUTBASE)/64 
      CFLAGS_link_libs = -L$(GCCLIBDIR) -lmyLib     
    else 
      CXXEXTRA_FLAGS = -m32 
      GCCDIR = $(GCCBASE)/macosx/4.8.1 
      GCCLIBDIR_W = $(GCCBASE)/macosx/4.8.1/lib/i386 
      GCCLIBDIR = $(GCCLIBDIR_W) 
      CFLAGS_common += -I$(GCCBASE)/macosx/4.8.1/include 
      OUTDIR = $(OUTBASE)/32 
    CFLAGS_link_libs = -L$(GCCLIBDIR) -lmyLib     
endif 
endif 
all: $(SRCS) 
    echo "Building Program application..." 
    $(CXX) $(CXXEXTRA_FLAGS) $(CFLAGS_common) $(INCLUDES) $^ -o $(OUTDIR)/$(OUT_ARTIFACT) $(CFLAGS_link_libs)   
    rm -f *.[o] *.log core 

Команда, которая запускается на выполнение на Mac OS выглядит следующим образом с ошибками компоновщика, так как MYLIB не был найден:

[exec] c++ -I. -IAuto*.h -IProgram.h Program.cpp -o /Program 

В то время как я ожидал моей команде, чтобы быть похожим на это:

[exec] c++ -m32 -I. -IAuto*.h -IProgram.h Program.cpp -o /Program -LmyPath -lmyLib 

Почему моя команда не включает -m32 и Linking путь библиотеки?

Я также пробовал печатать CXXEXTRA_FLAGS и CFLAGS_link_libs, но они пустые.

ответ

2

Вы никогда не устанавливаете переменные OSNAME или GFLIB_MODEL в любое значение в этом файле makefile, поэтому они оба пустые. Таким образом, ни один из тестов для OSNAME истинны, и эти значения никогда не установлены в CXXEXTRA_FLAGS и т.д.

ETA: Вот пример, основанный на ваших комментариев:

$ cat Makefile 
ifeq ($(OSTYPE),Mac OS X) 
    $(info got mac) 
endif 

all: ; @: 

$ make 

$ make OSTYPE=Mac 

$ make OSTYPE='Mac OS X' 
got mac 
+0

Благодаря MadScintist: если OSNAME что я Пассингу «Mac OS X» вместо «Darwin», как мне сравнить его в make-файле. ifeq ($ (OSNAME), Дарвин) следует заменить на что? – user3082802

+0

Является ли очевидным 'ifeq ($ (OSNAME), Mac OS X)' не работает? – MadScientist

+0

Нет, это не сработало для меня, любые изменения для пробелов, разделенных пробелами, могут быть? – user3082802

Смежные вопросы