Thread overview | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
September 16, 2020 Neater "not version (...)" ? | ||||
---|---|---|---|---|
| ||||
Hello. I wonder if there is a better way to compile something if the current operating system is _not_ a specific platform. For example, I only want some code to compile if the operating system is not Windows. Currently I do this: version (Windows) { } else { // ... my code } Is there a neater version of this, like `!version (Windows) { /+ ... my code +/ }` ? |
September 16, 2020 Re: Neater "not version (...)" ? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Vladimirs Nordholm | On Wednesday, 16 September 2020 at 17:53:31 UTC, Vladimirs Nordholm wrote:
> Hello.
>
> I wonder if there is a better way to compile something if the current operating system is _not_ a specific platform.
>
> For example, I only want some code to compile if the operating system is not Windows. Currently I do this:
>
> version (Windows)
> {
> }
> else
> {
> // ... my code
> }
>
> Is there a neater version of this, like `!version (Windows) { /+ ... my code +/ }` ?
Not what you may want, but a dub solution is available.
"excludeSourceFiles-windows" : ["source/someunixcode.d"]
|
September 16, 2020 Re: Neater "not version (...)" ? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Vladimirs Nordholm | On 2020-09-16 19:53, Vladimirs Nordholm wrote: > Hello. > > I wonder if there is a better way to compile something if the current operating system is _not_ a specific platform. > > For example, I only want some code to compile if the operating system is not Windows. Currently I do this: > > version (Windows) > { > } > else > { > // ... my code > } > > Is there a neater version of this, like `!version (Windows) { /+ ... my code +/ }` ? The workaround for that is to define booleans for all versions and then use `static if`: version (Windows) enum windows = true; else enum windows = false; static if (!windows) { // ... my code } -- /Jacob Carlborg |
September 16, 2020 Re: Neater "not version (...)" ? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ferhat Kurtulmuş | On Wednesday, 16 September 2020 at 18:07:25 UTC, Ferhat Kurtulmuş wrote:
> On Wednesday, 16 September 2020 at 17:53:31 UTC, Vladimirs Nordholm wrote:
>> Hello.
>>
>> I wonder if there is a better way to compile something if the current operating system is _not_ a specific platform.
>>
>> For example, I only want some code to compile if the operating system is not Windows. Currently I do this:
>>
>> version (Windows)
>> {
>> }
>> else
>> {
>> // ... my code
>> }
>>
>> Is there a neater version of this, like `!version (Windows) { /+ ... my code +/ }` ?
>
> Not what you may want, but a dub solution is available.
> "excludeSourceFiles-windows" : ["source/someunixcode.d"]
Unfortunately for my use case this does not work here. Thanks for the tip though!
|
September 16, 2020 Re: Neater "not version (...)" ? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jacob Carlborg | On Wednesday, 16 September 2020 at 18:54:45 UTC, Jacob Carlborg wrote:
> On 2020-09-16 19:53, Vladimirs Nordholm wrote:
>> Hello.
>>
>> I wonder if there is a better way to compile something if the current operating system is _not_ a specific platform.
>>
>> For example, I only want some code to compile if the operating system is not Windows. Currently I do this:
>>
>> version (Windows)
>> {
>> }
>> else
>> {
>> // ... my code
>> }
>>
>> Is there a neater version of this, like `!version (Windows) { /+ ... my code +/ }` ?
>
> The workaround for that is to define booleans for all versions and then use `static if`:
>
> version (Windows)
> enum windows = true;
> else
> enum windows = false;
>
> static if (!windows)
> {
> // ... my code
> }
Ah, I guess it boils down to this then. Doesn't really make it "neater", but thank you for the tip!
|
September 16, 2020 Re: Neater "not version (...)" ? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Vladimirs Nordholm | On Wednesday, 16 September 2020 at 19:04:24 UTC, Vladimirs Nordholm wrote:
> On Wednesday, 16 September 2020 at 18:54:45 UTC, Jacob Carlborg wrote:
>> version (Windows)
>> enum windows = true;
>> else
>> enum windows = false;
>>
>> static if (!windows)
>> {
>> // ... my code
>> }
>
> Ah, I guess it boils down to this then. Doesn't really make it "neater", but thank you for the tip!
I wrote this helper a little while back:
struct Version {
template opDispatch(string name) {
mixin("version ("~name~") enum opDispatch = true; else enum opDispatch = false;");
}
}
static if (Version.Windows) pragma(msg, "Windows machine");
static if (Version.linux) pragma(msg, "Linux machine");
Note that it only works for global versions, and those defined in the same module as Version.
--
Simen
|
September 16, 2020 Re: Neater "not version (...)" ? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Vladimirs Nordholm | On Wednesday, 16 September 2020 at 19:04:24 UTC, Vladimirs Nordholm wrote:
> Ah, I guess it boils down to this then. Doesn't really make it "neater", but thank you for the tip!
IMO, just keep it as `version(Windows) {} else { ... }` if you HAVE to instead of one of the workarounds people suggest. I do wonder what kind of code runs on the "not Windows" operating system though, do you mean `version(Posix)` perhaps?
|
September 18, 2020 Re: Neater "not version (...)" ? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Vladimirs Nordholm | On 2020-09-16 21:04, Vladimirs Nordholm wrote: > Ah, I guess it boils down to this then. Doesn't really make it "neater", but thank you for the tip! You only need to declare the enums ones. -- /Jacob Carlborg |
Copyright © 1999-2021 by the D Language Foundation