在 Eclipse CDT 中抑制 "program not found" 个错误

Suppress "program not found" errors in Eclipse CDT

我的大部分团队使用 .bat 文件设置路径,然后 运行 构建。 .bat 文件允许选择多个不同的 compiler/target 平台,但都使用某些版本的 GCC/G++ 或类似的编译器。

我创建了一个 Eclipse 项目,它只使用 .bat 文件,而不是重新发明轮子并跟踪每个构建所需的所有路径(如果有人更新了 .bat 文件,我需要更新它)无论如何)。

这对于构建非常有用,我什至可以看到编译器 errors/warnings,但总是存在一些额外的错误:

Program "gcc" not found in PATH
Program "g++" not found in PATH

我见过很多关于这些错误和类似错误的问题,但在那些情况下用户无法构建,解决方案是安装工具 and/or 更新他们的 PATH 或 Eclipse 环境设置。我不想那样做;我需要的所有工具都已安装,.bat 文件可以很好地设置用于构建的 PATH。有没有办法抑制这些错误,或者让 Eclipse 不尝试查找编译器可执行文件,因为无论如何构建都会成功?


编辑:正如我目前收到的答案中所建议的,这是在全局发现设置中放置编译器的完整路径后控制台上的输出,不是我最喜欢的解决方案,即使它有效,但我可能会处理它。不管错误是否消失:

15:27:24 **** Running scanner discovery: CDT GCC Built-in Compiler Settings MinGW ****
"C:\redacted\localapps\MinGW5\bin\g++.exe" -E -P -v -dD C:/Project_Files/redacted/code_workspaces/redacted/.metadata/.plugins/org.eclipse.cdt.managedbuilder.core/spec.C 
Reading specs from C:/redacted/localapps/MinGW5/bin/../lib/gcc/mingw32/3.4.2/specs
Configured with: ../gcc/configure --with-gcc --with-gnu-ld --with-gnu-as --host=mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls --enable-languages=c,c++,f77,ada,objc,java --disable-win32-registry --disable-shared --enable-sjlj-exceptions --enable-libgcj --disable-java-awt --without-x --enable-java-gc=boehm --disable-libgcj-debug --enable-interpreter --enable-hash-synchronization --enable-libstdcxx-debug
Thread model: win32
gcc version 3.4.2 (mingw-special)
 C:/redacted/localapps/MinGW5/bin/../libexec/gcc/mingw32/3.4.2/cc1plus.exe -E -quiet -v -P -iprefix C:\redacted\localapps\MinGW5\bin\../lib/gcc/mingw32/3.4.2/ C:/Project_Files/redacted/code_workspaces/redacted/.metadata/.plugins/org.eclipse.cdt.managedbuilder.core/spec.C -dD
ignoring nonexistent directory "C:/redacted/localapps/MinGW5/bin/../lib/gcc/mingw32/3.4.2/../../../../mingw32/include"
#define __cplusplus 1
ignoring nonexistent directory "/mingw/lib/gcc/mingw32/../../../include/c++/3.4.2"
#define __STDC_HOSTED__ 1
ignoring nonexistent directory "/mingw/lib/gcc/mingw32/../../../include/c++/3.4.2/mingw32"
#define __GNUC__ 3
ignoring nonexistent directory "/mingw/lib/gcc/mingw32/../../../include/c++/3.4.2/backward"
...

然后一堆#defines

我在此输出的发现选项中使用的命令字符串是 C:\redacted\localapps\MinGW5\bin${COMMAND}.exe ${FLAGS} -E -P -v -dD "${INPUTS}"

根据提供的信息,这些错误来自 CDT 的扫描器发现部分。

在我的机器上,完整的错误如下所示:

Description                             Location                                                                                        Type
Program "g++" not found in PATH         Preferences, C++/Build/Settings/Discovery, [CDT GCC Built-in Compiler Settings MinGW] options   C/C++ Scanner Discovery Problem
Program "gcc" not found in PATH         Preferences, C++/Build/Settings/Discovery, [CDT GCC Built-in Compiler Settings MinGW] options   C/C++ Scanner Discovery Problem

或截图

这里发生的事情是 Eclipse CDT 正在(尝试)启动 GCC 和 G++ 以找出 global 设置用于包含路径之类的东西,等等

要解决此问题,请转到错误消息中指定的位置并调整扫描仪设置。这是与我收到的特定错误匹配的设置。

您的错误可能出在项目中或全局设置中。

要更新 MinGW 设置,您可以提供看起来像 GCC/G++ 的批处理文件的路径,但首先要正确设置您的环境,或者您可以直接指向 Eclipse CDT自己没找到。

例如你可以有:

D:\path\to\my\compilers${COMMAND}.exe ${FLAGS} -E -P -v -dD "${INPUTS}"

作为设置而不是默认值。

为了帮助调试,请检查控制台视图中的分配控制台以准确查看正在发生的事情运行以及正在生成的输出。

下面是它不起作用时您可能会看到的内容。希望控制台中的错误消息足以解决您机器上的问题。

21:12:54 **** Running scanner discovery: CDT GCC Built-in Compiler Settings MinGW ****
"D:\path\to\my\compilers\g++.exe" -E -P -v -dD C:/Temp/workspace/.metadata/.plugins/org.eclipse.cdt.managedbuilder.core/spec.C 
Cannot run program "D:\path\to\my\compilers\g++.exe": Launching failed

Error: Program "D:\path\to\my\compilers\g++.exe" not found in PATH
PATH=[\bin;\bin; -- snip --]

21:12:54 Build Finished (took 37ms)

这是匹配的屏幕截图:

如果它确实有效,您应该会看到很多 #define 等显示编译器的全局状态。