为什么用 brew 安装 fmt 和 gcc 编译器后找不到 fmt 库?

Why is fmt library not found after installing fmt and gcc compiler with brew?

我正在使用 MACOS Mojave 版本 10.14.3,需要使用 GNU 编译器而不是 clang。

我使用 brew install gcc 安装了 gcc 编译器。 然后我使用 brew install fmt.

安装了 fmt 库

我将 #include <fmt/format.h> 放在我的 C++ 脚本的顶部

然后我输入:

/usr/local/bin/g++-8 -O0 -g3 -Wall -c -fmessage-length=0 -std=c++17 -MMD -MP -MF"src/trail2.d" -MT"src/trail2.o" -o "src/trail2.o" "../src/trail2.cpp"

但是我得到这个错误:

fatal error: fmt/format.h: No such file or directory

当我尝试使用 boost 库时发生同样的情况。

我用clang的时候发现fmt和boost没有问题

以防万一我为 C/C++ 开发人员使用 Eclipse IDE。版本:2018-12 (4.10.0).

具体来说,如何让 fmt 库与我用 brew 安装的 gcc 一起工作?

我在 /usr/local/Cellar 的 Mac 中拥有的是:

drwxr-xr-x   3 aaa  staff    96 Feb 22 22:07 gcc
drwxr-xr-x   3 aaa  staff    96 Feb 23 01:58 fmt

我在 /usr/local/Cellar 的 Mac 中拥有的是:

    lrwxr-xr-x    1 aaa  admin        29 Feb 22 22:07 c++-8 -> ../Cellar/gcc/8.2.0/bin/c++-8
    lrwxr-xr-x    1 aaa  admin        29 Feb 22 22:07 cpp-8 -> ../Cellar/gcc/8.2.0/bin/cpp-8
    lrwxr-xr-x    1 aaa  admin        29 Feb 22 22:07 g++-8 -> ../Cellar/gcc/8.2.0/bin/g++-8
    lrwxr-xr-x    1 aaa  admin        29 Feb 22 22:07 gcc-8 -> ../Cellar/gcc/8.2.0/bin/gcc-8

感谢高级帮助

homebrew 的工作方式是它把所有东西都放在

/usr/local/Cellar/PACKAGE-NAME/PACKAGE-VERSION

然后它为 /usr/local/bin 中的二进制文件创建链接,例如

/usr/local/bin/grep -> /usr/local/Cellar/grep/4.17/bin/grep

这样你只需要将 /usr/local/bin 放在你的 PATH 中,所有 homebrew 程序都可以按名称运行,例如grep 在上面的例子中。


它对编译做同样的事情,它将实际的头文件和库放在:

/usr/local/Cellar/PACKAGE-NAME/PACKAGE-VERSION/include
/usr/local/Cellar/PACKAGE-NAME/PACKAGE-VERSION/lib

并创建链接到

中的链接
/usr/local/include
/usr/local/lib

因此,您的 gcc 命令将是:

g++-8 -I /usr/local/include -L /usr/local/lib -lfmt <PROGRAM.CPP> -o <PROGRAM>

您可以查看哪些文件属于您的 fmt 包以及它们所在的位置:

brew ls fmt --verbose

如果安装 pkg-config,使用:

brew install pkg-config

它将使用文件 fmt.pc 并且可以告诉您正确的编译开关,如果您键入:

pkg-config --libs --cflags fmt

示例输出

-I/usr/local/Cellar/fmt/5.3.0/include -L/usr/local/Cellar/fmt/5.3.0/lib -lfmt

这意味着您可以将 gcc 命令简化为:

g++-8 $(pkg-config --libs --cflags fmt) <PROGRAM.CPP> -o <PROGRAM>