c - 如何更改以下 LINUX 的 Makefile,使其在 MACOS 上也能运行

标签 c linux macos makefile

我的 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 clonescp 从某处复制源文件来完成。

提取(从存档中解压)通常是通过以下方式完成的:

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/

相关文章:

关于 PCA9555 扩展器上#interrupt-cells 配置的混淆

macos - 如何使用快捷方式弹出菜单栏?

ios - 在终端中找不到 Ninja 命令

c - 在 C 中使用动态数组和 gsl_vector 写入和读取结构体

c - Printf 产生错误的整数

有人可以帮忙解释一下这个 C 算法在做什么吗?

c - 在 C 中实现 FIFO 列表

angularjs - 如何永久运行 Ionic 服务?

linux - 安装露天社区版时 initdb 出现权限被拒绝错误

C 代码不能在 Linux 上运行,但可以在 Mac 上运行