【问题标题】:How to change the following Makefile so that it works for MacOS? [closed]如何更改以下 Makefile 以使其适用于 MacOS? [关闭]
【发布时间】:2020-04-11 01:21:21
【问题描述】:

我曾经在 Linux 中进行 C 编程。现在,我有了 MacBook,我想在 Mac 上做编程。

我应该如何更改以下makefile?

# Makefile

OBJS = main

$(OBJS): $(OBJS).o
#   gcc -O2 -Wall $(OBJS).c -o $(OBJS)  -I/usr/local/include  -L/usr/local/lib64   -leggx -lX11 -lm
    gcc $(OBJS).c -o $(OBJS)  -I/usr/local/include  -L/usr/local/lib64   -leggx -lX11 -lm

$(OBJS).o: $(OBJS).c
    gcc -c $(OBJS).c

.PHONY: clean
clean:
     rm -f $(OBJS) $(OBJS).o 

【问题讨论】:

  • 也许你不需要?您对当前形式的 makefile 有什么问题?当你使用它并运行make时会发生什么?
  • edit您的问题并解释为什么您需要更改Makefile。您收到错误消息吗?
  • 感谢您的 cmets。我正在尝试编译我的 c 程序代码。我得到的错误是“致命错误:找不到 eggx.h 文件”。EGGX 是一个图形库,在我的程序中用作头文件。我认为这是一个问题makefile ,所以我在这里请求帮助。
  • 你为什么要恢复语法修复?
  • 对不起,搞错了。

标签: c linux macos makefile


【解决方案1】:

您至少需要查看以下内容:

  • 你想继续使用gcc作为你的编译器,还是改用苹果的clang

  • 如果要使用 X11,则需要安装 XQuartz 并添加以下选项:

    X11FLAGS=-I /opt/X11/include X11LIBS=-L /opt/X11/lib -lx11

  • 您可以删除 /usr/local/lib64,因为 ma​​cOS 不使用它

  • 您需要决定是否使用包管理器,例如 homebrew,因为 Apple 不提供。与此相关,您可能希望使用 homebrew 中的 pkgconfig 来自动化您的编译器和链接器标志和开关。

您可能还会发现thisthis 很有帮助。


我将egg 包中包含的Makefile 修改为如下所示,它可以在我的Mac 上的macOS Mojave 下编译和构建:

CC    = gcc
CFLAGS = -O2 -Wall
DESTDIR =
USERCC   = gcc
USERCCFLAGS = -O2 -Wall
USERFC   = gfortran
USERFCFLAGS = -O2 -Wall

IINC  = -I/opt/X11/include
LLIB  = -L /opt/X11/lib

PREFIX = /usr/local

INCDIR = $(PREFIX)/include
LIBDIR = $(PREFIX)/lib
BINDIR = $(PREFIX)/bin

LOCALINC = -I$(INCDIR)
LOCALLIB = -L$(LIBDIR)

LLINKS = -leggx -lX11 -lm

DEFS = $(VDEFS) $(TDEFS) $(UDEFS) $(PDEFS) $(XDEFS)

all:: _xslave_ mkexheader exec_xslave.h lib egg

install:: lib egg
    if [ ! -d $(DESTDIR)$(LIBDIR) ];then sh install-sh -d $(DESTDIR)$(LIBDIR); fi
    if [ ! -d $(DESTDIR)$(INCDIR) ];then sh install-sh -d $(DESTDIR)$(INCDIR); fi
    if [ ! -d $(DESTDIR)$(BINDIR) ];then sh install-sh -d $(DESTDIR)$(BINDIR); fi
    sh install-sh -m 644 libeggx.a $(DESTDIR)$(LIBDIR)
    sh install-sh -m 644 eggx*.h $(DESTDIR)$(INCDIR)
    sh install-sh -m 755 egg $(DESTDIR)$(BINDIR)
    ranlib $(DESTDIR)$(LIBDIR)/libeggx.a

.c.o:   ; $(CC) $(CFLAGS) $(IINC) $(DEFS) -c $*.c

_xslave_: _xslave_.o _eggx_scrollbar.o
    $(CC) $(CFLAGS) _xslave_.o _eggx_scrollbar.o -o _xslave_ $(LLIB) -lX11

mkexheader: mkexheader.o
    $(CC) $(CFLAGS) mkexheader.o -o mkexheader

exec_xslave.h: mkexheader _xslave_
    ./mkexheader _xslave_ > exec_xslave.h

eggx_base.o: exec_xslave.h

lib:: eggx_base.o eggx_color.o
    ar cruv libeggx.a eggx_base.o eggx_color.o
    ranlib libeggx.a

egg:: egg.sh
    cat egg.sh > egg
    rm -f egg.t
    for i in USERCC "x@@$(USERCC)" USERFC "x@@$(USERFC)" \
      USERCCFLAGS "x@@$(USERCCFLAGS)" USERFCFLAGS "x@@$(USERFCFLAGS)" \
      IINC "x@@$(IINC)" LLIB "x@@$(LLIB)" LOCALINC "x@@$(LOCALINC)" \
      LOCALLIB "x@@$(LOCALLIB)" LLINKS "x@@$(LLINKS)" ; do { \
      if [ -f egg.t ] ; then \
        if [ "$$i" = "x@@" ] ; then \
          cat egg.t | sed -e "s|@@@TARGET@@@||" > egg ; \
        else \
          cat egg.t | sed -e "s|@@@TARGET@@@|$$i|" | sed -e 's|x@@||' > egg ; \
        fi ; \
        rm -f egg.t ; \
      else \
        cat egg | sed -e "s|@$$i@|@@@TARGET@@@|" > egg.t ; \
      fi ; \
    } done
    chmod 755 egg

clean::
    rm -f *.o *.exe egg egg.t libeggx.a _xslave_ mkexheader exec_xslave.h

如果您将eggxtarball 保存在目录HOME/eggx 中,则需要这样做:

cd $HOME/eggx
tar -xvf eggx-0.93r5.tar
cd eggx-0.93r5

然后从上面复制修改后的Makefile,并将其保存在该目录中为Makefile。现在只需运行:

make

它应该一切都很好。

【讨论】:

猜你喜欢
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 2020-11-08
相关资源
最近更新 更多