【问题标题】:GCC / G++ path include flags starts with '='GCC / G++ 路径包含标志以 '=' 开头
【发布时间】:2021-11-24 04:26:00
【问题描述】:

我尝试编写独立于平台的构建文件(供忍者使用)并尽量避免指定完整路径,例如D:/tools/x64/msys2/ucrt64/include/librsvg-2.0/usr/include/librsvg-2.0

GCC 文档这么说

如果 dir 以“=”或 $SYSROOT 开头,则“=”或 $SYSROOT 为 替换为 sysroot 前缀;请参阅 --sysroot 和 -isysroot。

但是在具有 MSYS2 环境的 Windows 上,当我设置像 -I=librsvg-2.0-I=/librsvg-2.0 这样的标志时,它没有效果。它可能是 MSYS2 唯一的行为,还是我做错了什么?

【问题讨论】:

  • 您生成忍者文件,而不是编写它们。使用像 cmake 或 meson 这样的构建系统。
  • 我使用的是 librsvg,它不支持 CMake,所以我只需要指定 -I 相对于系统包含目录。
  • 有一个非官方的 vcpkg librsvg 软件包,但我不想使用它——它的版本过时了,而且 vcpkg 对于我的简单项目来说非常可怕。问题的重点是了解该标志是如何工作的。
  • 虽然我们正在走这条路,但它也并不真正支持忍者。你./configure && make && make install图书馆。但这与我的 comment 无关,即您不编写 ninja 文件。这不是我个人的观点,这就是工具的设计方式。更接近您的观点,您引用的文档有两种选择;你试过另一个吗?我问是因为-I= 看起来完全是假的。还因为您引用的文档提供了一个潜在的解决方案,但这里没有人可以说您是否尝试过。
  • 我的项目编译时只有几个 -I 包含标志。我现在需要的只是指定这些标志而不需要系统相关的路径。当我指定完整路径时,一切正常,但我尽量避免。我只是想了解 = 在 GCC 编译器的 -I 标志中是如何工作的。目前我可以只用一个g++ 命令来构建这个项目,即使没有make 或ninja。 Ninja build 文件比 make 文件简单和笨拙得多,这里不需要配置,因为这只是一个原型,我在其中尝试了库函数。

标签: c++ c gcc compiler-errors gnu


【解决方案1】:

好吧,GCC 有自己的系统包含路径,但它没有默认的 $SYSROOT 值。所以首先你需要使用--sysroot=your_path 标志来设置它,如果你想使用-I=

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 2017-05-17
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 2015-11-14
    相关资源
    最近更新 更多