【发布时间】: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