Search code examples
windowscompilationrust

Can I conditionally compile my Rust program for a Windows subsystem?


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?


Solution

  • 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")]