CMake support for D

King_DuckZ king_duckz at gmx.com
Tue Feb 27 14:32:54 UTC 2018


On Tuesday, 27 February 2018 at 09:20:21 UTC, Russel Winder wrote:
> On Mon, 2018-02-26 at 20:28 +0000, King_DuckZ via 
> Digitalmars-d-learn wrote:
>> […]
>> 
>> One [more] year ahead, and I found this old thread I had 
>> forgotten about. In the meantime, trentforkert has stopped 
>> (apparently) working on cmake, and dcarp's has failed me for 
>> projects larger than a couple files. It also looks like it's 
>> not receiving updates anymore.
>
> The DCarp CMake-D repository is active. If it doesn't work then 
> it just needs more work.
>
>> All of this kept me away from D. Now that gdc is rumoured to 
>> get merged into gcc 8 tho, is there any concrete chance of 
>> this happening? I think even rust (which came out after D) has 
>> decent cmake support at this point.
>
> As far as I am aware CMake is not used for Rust, the vast 
> majority of people use Cargo. This mean it is certain some Rust 
> people will use CMake. :-)
>
> It is worth noting that the Rust plugin to CLion does not 
> require CMake, it uses Cargo. CLion not IDEA is not the focus 
> of the Rust plugin due to debugging. CLion is the platform for 
> all native code language for JetBrains as I understand it 
> exacly because of debugging support. I believe the work on D 
> plugin support for IntelliJ IDEA should refocus on CLion. It 
> can still use Dub it seems, and it can get access to the 
> debugging framework.
>
> Clearly it would still be good in D had CMake support. It 
> strikes me the DCarp's CMake-D repository is the one to support.

Right, I stand corrected about Rust, though as you say there are 
those who use it with CMake.
About cmake-d, there's this 
https://github.com/dcarp/cmake-d/issues/19, which I could work 
around. More seriously though, it doesn't track dependencies 
between .d files. So if for example you have:

// a.d
void foo() {}

// b.d
import a;
int main() { foo(); return 0; }

and compile it, all goes well. Now if you change a to be:

//a.d
void foo(a=10) { //use a somewhere }

and just 'make' then you're in for some really funky crash (it 
may not be the exact code, but I had a problem very similar to 
this). The only fix is make clean; make. This is really hard to 
spot as soon as you start having more than a couple files, and 
it's really something the build system should take care of. 
Unfortunately I don't think a purely scripted solution for cmake 
will ever be able to handle this problem.

Speaking of CLion, at this point I've pretty much abandoned it, 
vim is more than enough for me. My problem is mixing D with C and 
C++, and with being already so familiar with CMake that starting 
all over again just puts me off to the point I'd rather not do 
any D at all. Build systems are not my passion really, and 
learning CMake was already painful enough.


More information about the Digitalmars-d-learn mailing list