How can I capture the cl.exe command line in Visual Studio 2010?

那年仲夏 提交于 2019-12-23 05:24:17

问题


I have a project that I converted from a makefile that has a source file that expects the command line options from the compiler. For example for when the project was built with gcc if you did program --help it would spit out the gcc command line used to compile the program.

How can I do the same thing in Visual Studio, so that it spits out the cl command line used to compile the program? Basically I want to hit F7 (to build solution) and have the whole thing automated. I can't find a macro for it. Thanks

edit; I mean programatically, so for example I want when I run the program for its output to contain the cl.exe command string that is used. You can see the command line at Configuration Properties > C/C++ > Command Line > All Options but I can't find a macro for it or some way to encapsulate it in a file.


回答1:


Since VS switched the underlying build system to MsBuild the command line as shown in that dialog is created programatically within VS only. It might not even be the exact command line passed to cl: MsBuild itself invokes CL via a task and as such there is no direct link with what is shown in VS nor is there a way to get the command line out of it.

Anyway, there is no such thing as the command line since each source file might have different options. Furthermore I doubt you want the full commandline including the absolute include paths etc. Nobody is interested in that. Now if you make clever use of the macros from http://msdn.microsoft.com/en-us/library/b0084kay.aspx you can sort of recreate the command line yourself since most options are there:

std::string CompilerCommandLineOptions()
{
  std::string cmd;
  #ifdef _CHAR_UNSIGNED
  cmd += " /J";
  #endif
  #ifdef __cplusplus_cli
  cmd += " /clr";
  #endif
  #ifdef _CPPRTTI
  cmd += " /GR"
  #endif
  //etc
  return cmd;
}

Note: are you sure it's worth the hassle? Is there really somebody interested in the command line? It's not even sufficient to build the project. Why not the linker options as well then?




回答2:


A .vcxproj is a Visual Studio project in the MSBuild project format. You can build it by running msbuild.exe, devenv.exe, devenv.com, using the Visual Studio GUI or the MSBuild API.

Visual Studio GUI uses the MSBuild API. In doing so, it limits the MSBuild output. If you want more details, change your user settings in Visual Studio:

Tools > Options > Project and Solutions > Build and Run > two verbosity settings

Detailed will show the cl.exe command lines.



来源:https://stackoverflow.com/questions/20898409/how-can-i-capture-the-cl-exe-command-line-in-visual-studio-2010

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!