On Monday, 7 July 2014 at 22:00:51 UTC, Rainer Schuetze wrote:


On 07.07.2014 12:46, ParticlePeter wrote:
On Sunday, 6 July 2014 at 19:27:38 UTC, Rainer Schuetze wrote:

These object files are in the library ;-) That means manual selection, though, as incremental builds to multiple object files don't work with
dmd, and single file compilation is painfully slow.

Not sure if I am getting this right, so when one object file has to be
recompiled all other object files, even if up to date, would be
recompiled ?

That's how it is currently done if you don't use "single file compilation". Compiling only modified and dependent modules in one step could work incrementally, but especially template instantiations make this hard to do correctly.


The modules form MyProject do import the MyLib modules properly, I do not get compiler errors. However, the compiler should create Object files from MyLib modules, and the linker should link them. But he
does not.
On the other hand, when I add MyLib modules to MyProject ( Rightclick MyProject - add - existing item... MyLib source files ) then linking
works. I do not understand why the later step is necessary.

dmd does not compile imported modules, but rdmd does.

Ähm ... not seeing the connection here either, why is this significant ?

dmd just compiles the files given on the command line. rdmd makes two passes, one to collect imported files, and another to compile all the collected files. So rdmd works the way you want dmd to work (if I understand you correctly).

I feel that I could not explain my problem properly, so one example: Importing phobos modules. I do not have to define any import path or lib file in the project settings, I just need to import std.somthing. That's because the import path for phobos modules are stored in the dmd sc.ini
file.
When I want to import my modules which are somewhere on my hard-drive and not added to my project I need to tell the compiler where these modules can be found, using the additional import path project setting.
That's fine, doing this.

But result is, std.somthing works, my modules in a path known by the compiler don't work, giving me linker errors. Why ? ( I do not create a
lib, I just want to import the module. )


phobos is precompiled to a library and is automatically included in the link. If you want your custom modules to work the same way, you have to compile them to a library.

Thanks for claryfying all the above. If the std.library is rebuild whenever a template is used, than my assumption that MyLib compiles slow due to usage of ( very simple ) templates must be wrong. I will dive deeper into profiling. Thanks a lot.

Cheers, ParticlePeter

Reply via email to