为了从程序中自动检测本机GCC的安装,我想获得gcc.exe或其根文件夹的当前路径。但是,当我输入gcc -print-prog-name=gcc时,它只是返回gcc,这显然不是我所期望的。
我如何使用gcc或其他假定安装在系统上的部件,连同gcc一起,来检索到on安装或可执行文件的路径?
发布于 2018-03-19 20:04:36
至少对于Linux来说,“本机GCC安装”可以合理地解释为通过/usr/bin/gcc调用的GCC安装。但根据这种解释,它的安装路径是毫无疑问的。
每当您调用gcc时,如果找到这样的程序,那么在调用环境变量PATH的值中列出的目录之一中找到的仅仅是第一个名为gcc的程序。在Linux和其他类似Unix的OSes上是正确的。在Windows上是正确的。
假设gcc有一个选项--whereami,使它在标准输出中打印其安装路径。您将得到的答案将是在调用时在操作gcc中找到的第一个PATH安装所给出的答案。在一个系统上可能有任意数量的GCC安装,每当在执行部分的gcc --whereami中第一次发现安装时,每个安装都会为该系统提供不同的答案。
在Windows上,通过不同的PATH设置选择不同的GCC安装是司空见惯的事情,而“GCC的本地安装”这一概念没有任何意义。但它也适用于Linux,有时也会使用。要点是:无论您运行什么命令来查找gcc的安装位置,您得到的任何答案原则上都取决于操作PATH --除非您使用绝对文件名运行该命令:
/usr/bin/gcc --whereami当然,这等于在你问问题之前先决定答案。
通过跨平台的方法,您可以发现运行gcc的目录,如果有命令gcc ...的话,就是获取操作的PATH (以编程的方式使用getenv),解析它所包含的从左到右的目录,以及连续的目录查询文件系统中是否存在可执行的gcc,在找到一个可执行的gcc时停止。
因为这只能给出一个可操作的PATH的答案,而且由于PATH的值需要在PATH和Unix类的OSes上进行不同的解析,所以您也可以调用特定于操作系统的实用程序来做同样的事情。
类Unix:
$ which gcc
/usr/bin/gccWindows:
C:\>where gcc
C:\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev0\mingw64\bin\gcc.exe请注意,在Windows情况下,我需要选择我的mingw-w64终端环境来获得答案。
若要以编程方式执行命令并获取其输出,请参见How can I run an external program from C and parse its output?。在Windows上,调用_popen而不是popen。
https://stackoverflow.com/questions/49365426
复制相似问题