Windows 从GCC获取预定义宏,而不使用临时文件
是否有一种方法可以从GCC预处理器检索预定义的宏,而不必使用临时文件(例如使用管道) 这里有一个关于StackOverflow的类似问题,但是它的所有答案都使用命令行,而我需要从进程中读取提到的数据。 谷歌基本上会返回很多关于这个问题的命令行版本的答案 当我尝试使用管道在Linux上执行命令行技巧将输出定向到/dev/null或在Windows上执行NUL时:Windows 从GCC获取预定义宏,而不使用临时文件,windows,gcc,command-line,mingw,c-preprocessor,Windows,Gcc,Command Line,Mingw,C Preprocessor,是否有一种方法可以从GCC预处理器检索预定义的宏,而不必使用临时文件(例如使用管道) 这里有一个关于StackOverflow的类似问题,但是它的所有答案都使用命令行,而我需要从进程中读取提到的数据。 谷歌基本上会返回很多关于这个问题的命令行版本的答案 当我尝试使用管道在Linux上执行命令行技巧将输出定向到/dev/null或在Windows上执行NUL时: RunAndGetOutput("cpp -dM -E < NUL"); RunAndGetOutput(
RunAndGetOutput("cpp -dM -E < NUL");
RunAndGetOutput(“cpp-dM-E
。。。出现以下错误:
cpp.exe:错误:我不确定
NUL
在windows下的行为,但我假设它类似于Unix/Linux中的/dev/null
:
在我的Ubuntu虚拟机上,我可以做:
cpp -dM -E -xc /dev/null
因此,我假设在windows下,您可以执行以下操作:
cpp -dM -E -xc NUL
这假设NUL
的行为本质上类似于一个空文件。如果type NUL
的输出是这里的任何指示符,那么希望是这样
或者,如果这不起作用,您可以在cmd.exe
子shell中执行cpp
命令并重定向:
cmd.exe /C "cpp -dM -E < NUL"
cmd.exe/C“cpp-dM-E
从
RunAndGetOutput()
的角度来看,这只是一个cmd.exe
命令,只传递了几个参数,没有管道/重定向。但是cmd.exe
shell将把传递的字符串解释为命令,重要的是将理解如何处理我不确定NUL
在windows下的行为,但我假设它类似于Unix/Linux中的/dev/null
:
在我的Ubuntu虚拟机上,我可以做:
cpp -dM -E -xc /dev/null
因此,我假设在windows下,您可以执行以下操作:
cpp -dM -E -xc NUL
这假设NUL
的行为本质上类似于一个空文件。如果type NUL
的输出是这里的任何指示符,那么希望是这样
或者,如果这不起作用,您可以在cmd.exe
子shell中执行cpp
命令并重定向:
cmd.exe /C "cpp -dM -E < NUL"
cmd.exe/C“cpp-dM-E
从RunAndGetOutput()
的角度来看,这只是一个cmd.exe
命令,只传递了几个参数,没有管道/重定向。但是cmd.exe
shell将把传递的字符串解释为命令,重要的是,它将理解如何处理,听起来您需要一个命名管道。查找CreateNamedPipe(Windows)或mkfifo(POSIX)。这样,您就可以获得一个特殊的文件名,作为输出文件传递给GCC。通常基于PID.RunAndGetOutput命名它的恼人的地方不是解释shell元字符,所以gcc看到一个,听起来你需要一个命名管道。查找CreateNamedPipe(Windows)或mkfifo(POSIX)。这样,您就可以获得一个特殊的文件名,作为输出文件传递给GCC。通常基于PID.RunAndGetOutput命名它的恼人的地方不是解释shell元字符,因此gcc看到了一个@nos-是的,因为总是有不止一种方法来做事情。但是要小心-windowsecho
有点不同-如果单独运行,它将打印echo已打开。
。要真正回显空行,需要执行echo.
。所以cmd.exe/C“echo.|cpp-xc-dM-E-”
应该可以做到这一点。@nos-是的,因为做事总是有多种方法。但是要小心-windowsecho
有点不同-如果单独运行,它将打印echo已打开。
。要真正回显空行,需要执行echo.
。所以cmd.exe/C“echo.|cpp-xc-dM-E-”
应该可以做到这一点。