我的 Linux 电脑上有一个 Makefile。我也想在 MacOS 上构建并运行相同的程序。如何编辑以下Makefile?
我想编译一个C程序,该程序具有图形库EGGXProCALL JAXA“eggx.h”的头文件。 我已经安装了 Xcode、XQuartz。
我已在以下目录中安装了 EGGX 文件。
[Home@/opt/eggx]$
我在以下目录中有一个 C 文件。
[主页@~/桌面/开发]$
我已经检查了以下内容。
① gcc 在这里工作正常[Home@~/Desktop/development]$
②连显示数字时钟工作原理的示例程序, 当当前目录为[Home@/opt/eggx]$
时③ 问题
当我尝试使用 Linux 中的 makefile 从 [Home@~/Desktop/development]$ 构建 [make] 程序时。
我总是收到以下错误消息。
[Home~/Desktop/development]$ sudo make
gcc -c main.c
main.c:7:10: fatal error: 'eggx.h' file not found
#include <eggx.h>
^~~~~~~~
1 error generated.
make: *** [main.o] Error 1
[Home@~/Desktop/development]$
这是 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
最佳答案
您必须按照正确的顺序执行操作,并且在正确完成上一步之前不要继续下一步。
1。下载并解压库。
下载通常使用 git clone
或 scp
从某处复制源文件来完成。
提取(从存档中解压)通常是通过以下方式完成的:
tar -xvf eggx-0.93r5.tar
这通常会创建一个新目录(与 tar 文件同名,但不带 .tar
扩展名),例如:
eggx-0.93r5
2。构建库。
通常您需要将目录更改为新创建的目录并运行make
。我上次给了你 Makefile,所以你需要这样做:
cd eggx-0.93r5
cp MAKEFILEFROMMARK Makefile
make
应该没有错误。如果有错误,您必须解决它们然后运行:
make clean # delete any rubbish from previous failed build
make
3。安装库。
您通常这样做:
make install
它的实际作用取决于您正在安装的软件包,但作为一般规则,它会将您刚刚创建的头文件和库复制到“已知”位置,例如/usr/local
或 /opt/package
。这个想法是通过“发布”或将它们安装到已知位置,使您自己的代码所需的所有文件可供计算机的所有用户使用。
4。了解如何编译使用该库的简单 C 程序。
您应该在与库下载位置完全不同的目录中执行以下步骤 - 不要将您的代码与库的代码混合。
如果您的程序像这样使用eggx.h
:
#include "eggx.h"
然后你需要找到eggx.h
的位置,如下所示:
find /usr /opt /Users -name eggx.h
如果结果是:
/path/to/somewhere/include/eggx.h
这意味着您必须将其添加到您的 gcc
命令中以告诉编译器如何找到它:
gcc -I/path/to/somewhere/include ...
如果您的库名为 libeggx.a
,您也需要找到它:
find /usr /opt /Users -name "libegg*a"
如果结果是:
/path/to/somewhere/lib/libeggx.a
这意味着您需要将其添加到您的 gcc
命令中,以告诉链接器它在哪里以及它的名称:
gcc ... -L/path/to/somewhere/lib -leggx
如果您的程序使用 X11,则必须在 Mac 上安装 XQuartz,并将 X11 的标志/开关添加到您的编译中:
gcc ... -I /opt/X11/include -L /opt/X11/lib -lx11 ...
因此,将所有这些放在一起,如果您的程序名为 program.c
,您将编译并链接:
gcc program.c -o program -I/path/to/somewhere/include -I /opt/X11/include -L /opt/X11/lib -lx11 -L/path/to/somewhere/lib -leggx
然后运行:
./program
5。制作一个包含您在 (4) 中学到的内容的 Makefile。
这可能看起来像这样:
EGGINC = -I /path/to/somewhere/include
EGGLIB = -L /path/to/somewhere/lib -leggx
X11INC = -I /opt/X11/include
X11LIB = -L /opt/X11/lib -lx11
$(OBJS): $(OBJS).o
gcc $(OBJS).c -o $(OBJS) $(EGGLIB) $(X11LIB)
$(OBJS).o: $(OBJS).c
gcc -I/usr/local/include $(EGGINC) $(X11INC) -c $(OBJS).c
关于c - 如何更改以下 LINUX 的 Makefile,使其在 MACOS 上也能运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59423639/