Cannot find module during separate compilation

Mike Parker via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Jun 10 11:41:14 PDT 2016


On Friday, 10 June 2016 at 15:20:21 UTC, Satoshi wrote:
> Hello,
>
> I have 2 files:
>
> source/test.d:
> module foo.test;
>
> and
>
> source/bar.d
> module foo.bar;
> import foo.test;
>
>
> When I am compiling this 2 files together there is no problem.
> But when I compile it with -c flag (LDC) compiler thrown an 
> error (cannot find foo/test.d)
>
> Why isn't import path resolved from module declaration when it 
> is possible?
> module foo.bar;
> import foo.test;
>
> Compiler should know foo is the same directory in which bar is.

For any module foo, the compiler will look for foo.d in the 
current directory or on the import path. For any module foo.bar, 
the compiler will look for foo/bar.d relative to the current 
directory or on the import path. So if you compile outside of the 
source directory, this breaks and you must specify an import path 
for the files to be found.

In your case, you have the file source/bar but have named the 
module foo.bar. Even if you cd source before compiling, the 
compiler will be looking for foo/bar.d because that's what you 
have named the module. If you want to use separate compilation, 
you need to make your module names have the same name as your 
file names.

If you do this:

source/foo/bar.d
source/foo/test.d

Then one option is:

dmd -Isource -c source/foo/bar.d

And another is:

cd source
dmd -c foo/bar.d

Assuming, of course, that bar.d imports foo.test.




More information about the Digitalmars-d-learn mailing list