4

I have a Rust program that I want to compile for the "windows" subsystem when I'm building it for distribution. Currently I am using this in my main.rs:

#![feature(windows_subsystem)]
#![windows_subsystem = "windows"]

This works, but when I run the tests on a Windows machine, the Windows subsystem does not have access to the console so I cannot see the output. I need to comment out the above lines of code in order to see the result of my tests.

Is there a way to conditionally compile which subsystem I'm running on in order to get the tests to work?

Shepmaster
  • 388,571
  • 95
  • 1,107
  • 1,366
user2601064
  • 281
  • 3
  • 10

1 Answers1

8

As described in The Rust Programming Language, specifically the chapter on conditional compilation:

You can also set another attribute based on a cfg variable with cfg_attr:

#[cfg_attr(a, b)]

Will be the same as #[b] if a is set by cfg attribute, and nothing otherwise.

In this case, it should be something like

#![cfg_attr(my_feature_name_i_made_up, windows_subsystem = "windows")]
Shepmaster
  • 388,571
  • 95
  • 1,107
  • 1,366
  • 2
    Sweet! it worked. The working code looks like this: #![feature(windows_subsystem)] #![cfg_attr(not(test), windows_subsystem = "windows")] #![cfg_attr(test, windows_subsystem = "console")] – user2601064 May 02 '17 at 18:45