【问题标题】:Makefile command on mac OS shows incorrect outputMac OS 上的 Makefile 命令显示不正确的输出
【发布时间】:2014-01-08 11:33:28
【问题描述】:

我是 Mac OS 新手,想执行以下 makefile 程序。

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 和链接库路径?

我也尝试打印 CXXEXTRA_FLAGS 和 CFLAGS_link_libs,但它们是空的。

【问题讨论】:

    标签: linux macos makefile gnu-make


    【解决方案1】:

    您永远不会将变量OSNAMEGFLIB_MODEL 设置为此makefile 中的任何值,因此它们都是空的。因此,OSNAME 的测试都不是真的,并且这些值从未在 CXXEXTRA_FLAGS 等中设置。

    ETA:这是一个基于您的 cmets 的示例:

    $ cat Makefile
    ifeq ($(OSTYPE),Mac OS X)
       $(info got mac)
    endif
    
    all: ; @:
    
    $ make
    
    $ make OSTYPE=Mac
    
    $ make OSTYPE='Mac OS X'
    got mac
    

    【讨论】:

    • 感谢 MadScintist:如果我传递的 OSNAME 是“Mac OS X”而不是“Darwin”,我如何在 makefile 中进行比较。 ifeq ($(OSNAME),Darwin) 应该换成什么?
    • 明显的ifeq($(OSNAME),Mac OS X) 不起作用吗?
    • 不,它对我不起作用,对空格分隔的单词有任何更改,可能吗?
    • 你做错了什么;它工作正常。但是,由于我们不知道您真正在做什么,我们无能为力。请更新您的问题并显示您正在使用的实际设置。
    猜你喜欢
    • 2016-01-10
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多