dmd -c behaviour doesn't take account of packages.
Jacob Carlborg
doob at me.com
Thu Feb 23 03:06:54 PST 2012
On 2012-02-22 23:05, Jonathan M Davis wrote:
> On Wednesday, February 22, 2012 22:33:35 Bernard Helyer wrote:
>> A discussion on the Mono-D IRC channel just made me realise
>> something.
>>
>> dmd -c foo/a.d bar/a.d
>>
>> The second module overwrites the first. This makes using 'pass
>> everything at once' with Mono-D (IDE plugin)
>> difficult/impossible. As far as I'm concerned, it's just a bug
>> that's never come up. The solution is trivial, of course. Prepend
>> package names so you get foo_a.o and bar_a.o. Either that or
>> allow specific output paths to be specified per-object.
>
> Then what happens when you have
>
> dmc -c foo/a.d foo_a.d
The way -oq works is the compiler uses the fully qualified name of the
module in the file name of the object file. So if foo/a.d has "module
foo.a;" and foo_a.d has "module foo_a;" then the following object files
will be created:
foo.a.o
foo_a.o
No conflict. If there would have been a conflict with the object files
,it would have been a conflict with the module names as well and the
compiler would have stopped before generating the object files.
>> Or just
>> produce one object file. Anything _but_ the current behaviour, in
>> fact.
>
> Generating one object file would make far more sense.
>
> If you're going to worry about modules when generating object files, then you
> really should be putting the object files in the same directory layout as the
> modules have. But that sort of thing is arguably a build tool's job, not the
> compiler.
No I don't think so. If the compiler generate object file names based on
the fully qualified module name it will be A LOT easier to implement a
build tool that can do incremental builds. I don't see any advantage of
putting the object files in sub directories.
> Regardless, I really wouldn't like the idea of screwing with the object file
> names to try and avoid collisions. If anything, the compiler should complain
> that
>
> dmd -c foo/a.d bar/a.d
>
> will result in a conflict, because one file would overwrite the other. But the
> single object file solution sounds reasonable.
>
> - Jonathan M Davis
--
/Jacob Carlborg
More information about the Digitalmars-d
mailing list