On Wednesday, 4 October 2017 at 16:31:35 UTC, Jiyan wrote:

as i see it the -Ipath command for dmd just imports the files within a directory but it doesnt work for sub directories, so i can write something like:

import subdirectoryFromPath.file;

Also with dub this doesnt seem possible (sourcePaths seems to work as the -I command).

Is there a way to do what i want? Or am i doing something wrong?

If you have this directory tree:

- mylib
-- pack1
--- a.d
--- b.d
---- pack2
----- c.d

Then you would pass -Imylib to the compiler. In your code, you can write the following:

import pack1.a;
import pack1.pack2.c;

You don't import files or directories, just packages and modules. By default, package names correspond to directory names and module names correspond to file names, but they don't have to (it's best practice, though).

And by the way what is the difference from sourcePaths to importPaths?

sourcePaths where DUB can find additional files, outside of the default source directory, to pass to the compiler for compilation. importPaths will all be passed to the compile as -I. It seems you think that importing a module causes its source file to be automatically compiled. That doesn't happen.

imports are strictly for the compiler to know which symbols are available for the current module to use. It does not attempt to compile imported modules. Imported modules might be part of your program or they might be part of a precompiled library. In the latter case, they don't need to be compiled because they already are. So the compiler leaves it up to you to decide which modules need to be compiled.

Dub, by default, will make sure all modules in your source directory are compiled. It will also guarantee the compiler knows where to find them for imports. Sometimes, you might also want to import files from a library that isn't available from code.dlang.org. You can use importPaths to tell dub additional paths to give the compiler. If those files are part of a precompiled library you can link the library and you're done. If they aren't, you can use sourcePaths to tell DUB that all the source modules in the additional paths also need to be passed to the compiler for compiling and linking into the final executable.
  • Imports Jiyan via Digitalmars-d-learn
    • Re: Imports Mike Parker via Digitalmars-d-learn

Reply via email to