我曾经在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
答案 0 :(得分:1)
您将至少要检查以下内容:
您要继续使用gcc
作为编译器,还是移至Apple的clang
如果要使用X11,则需要安装 XQuartz 并添加以下选项:
X11FLAGS=-I /opt/X11/include
X11LIBS=-L /opt/X11/lib -lx11
您可以删除/usr/local/lib64
,因为 macOS 不使用它
您将要决定要使用软件包管理器,例如 homebrew ,因为Apple不提供软件包管理器。与此相关的是,您可能希望使用自制软件中的pkgconfig
来自动执行编译器和链接器标志和开关。
我修改了Makefile
软件包中包含的egg
,使其看起来像这样,它可以在macOS Mojave的Mac上编译并正常运行:
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
如果将tarball
中的eggx
保存在目录HOME/eggx
中,则需要执行以下操作:
cd $HOME/eggx
tar -xvf eggx-0.93r5.tar
cd eggx-0.93r5
然后从上方复制修改后的Makefile
并将其另存为Makefile
在该目录中。现在运行:
make
它应该一切正常。