为了从程序中自动检测本机GCC安装,我想获取gcc.exe或其根文件夹的当前路径。 但是当我输入gcc -print-prog-name=gcc
时,它只是打印回gcc
这显然不是我所期望的。
如何使用 gcc 或据称与 gcc 一起安装在系统上的其他组件来检索 gcc 安装或可执行文件的路径?
至少对于Linux来说,"本机GCC安装"可能是合理的 解释为通过/usr/bin/gcc
调用的 GCC 安装。 但根据这种解释,它的安装是毫无疑问的 路径。
每当你调用gcc
,如果找到这样的程序,它是 只是第一个称为gcc
的程序,在其中一个中找到 环境变量PATH
的值中列出的目录调用的环境。在Linux和其他类Unix操作系统上是正确的。 在Windows上是真的。
想象一下,gcc
有一个选项--whereami
让它打印其安装 标准输出上的路径。你会得到的答案就是答案 由在操作PATH
中发现的第一次安装gcc
给出 调用时间。上可能有任意数量的 GCC 安装 一个系统,每个系统都会为gcc --whereami
产生不同的答案 该装置是在操作PATH
中发现的第一个装置。
通过不同的PATH
设置选择不同的 GCC 安装 在Windows上司空见惯,其中"GCC的本机安装"的概念 没有任何意义。但它也适用于Linux,有时也会使用。关键是:没有 无论您运行什么命令来找出gcc
的安装位置,任何 您得到的答案原则上取决于操作PATH
- 除非使用绝对文件名运行命令:
/usr/bin/gcc --whereami
这当然相当于在你问问题之前决定答案。
唯一可以从中发现目录的跨平台方法 哪个gcc
将由命令运行,如果有的话,gcc ...
,是获取 操作PATH
(以编程方式使用getenv
), 从左到右解析它包含的目录,并连续 目录查询文件系统是否存在可执行gcc
在其中,当你找到一个时就停下来。
由于这只能为操作PATH
给出答案, 并且由于PATH
的值需要在 Windows 上以不同的方式解析,并且 类Unix操作系统,您也可以调用执行相同操作的特定于操作系统的实用程序 东西。
类Unix:
$ which gcc
/usr/bin/gcc
窗户:
C:>where gcc
C:mingw-w64x86_64-7.2.0-posix-seh-rt_v5-rev0mingw64bingcc.exe
请注意,在Windows案例中,我需要选择我的mingw-w64
终端环境才能获得答案。
若要以编程方式执行命令并获取其输出,请参阅如何从 C 运行外部程序并分析其输出?。在 Windows 上,呼叫_popen
而不是popen
.