Brandon Van Every wrote:
I'm trying to grab the cl.exe banner so I can determine the MSVC
version number.  If cl.exe is in the path, then the following works at
a Windows Command Prompt.  This gives a short banner with the VC
version number and copyright.

  cl /? 2> banner.txt

But when I try to do it in a custom command, I can't get it to pipe to
a file.  I see the output go by in the Visual Studio output window,
with 1> prefixed in front of all the lines, and it is saved in
BuildLog.htm, but cbanner.txt has 0 length no matter whether I use >
1> 2> as the pipe.  Does MSVC simply not have a notion of piping or
something?  Do I have to do something MSVC-specific to capture the
output or the error?

IF(MSVC)
ADD_CUSTOM_COMMAND(
  OUTPUT ${CMAKE_BINARY_DIR}/cbanner.txt
  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
  COMMAND ${CMAKE_C_COMPILER} /? 2> cbanner.txt
)
ADD_CUSTOM_TARGET(cbanner ALL
  DEPENDS ${CMAKE_BINARY_DIR}/cbanner.txt
)
ENDIF(MSVC)


This is a "feature" in Visual Studio 8, which drove me nuts before I realized what was going on. The short story is that cl sends its output via a backchannel (a pipe, presumable) to the output window when run from inside Visual Studio, so redirection does not work (there is nothing to redirect). To get around this, you need to clear the environment variable VS_UNICODE_OUTPUT before invoking cl.exe.

The longer story (with some useful links):

http://thisisnotaprogrammersblog.blogspot.com/2007/05/redirecting-output-from-compilerlinker.html

--
/Jesper

_______________________________________________
CMake mailing list
[email protected]
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to