www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Building (and including libraries) without dub

reply Hasen Judy <hasen.judy gmail.com> writes:
Building simple programs without dub is easy, just pass a list of 
.d source files to `dmd` or `ldc2`.

What if I want to include a 3rd party library? Surely before dub 
existed, people were incorporating other libraries in their 
projects.

I want to learn how this works from first principles. I've been 
working with dynamic/interpreted languages for too long, I forgot 
what it's like to build native programs without a dependency 
manager.

Any help would be appreciated!
Aug 26
next sibling parent reply drug <drug2004 bk.ru> writes:
26.08.2017 12:03, Hasen Judy пишет:
 Building simple programs without dub is easy, just pass a list of .d 
 source files to `dmd` or `ldc2`.
 
 What if I want to include a 3rd party library? Surely before dub 
 existed, people were incorporating other libraries in their projects.
 
 I want to learn how this works from first principles. I've been working 
 with dynamic/interpreted languages for too long, I forgot what it's like 
 to build native programs without a dependency manager.
 
 Any help would be appreciated!
It's like C++. If you use Linux then: ``` dmd <list of your .d files like you do> -L/path/to/lib -llibrarynamewithoutlibprefix ``` or example ``` dmd myapp.d -L../otherproject/lib -lcool ``` line above compiles `myapp.d` file and links it with library `libcool` that is place in directory `../otherproject/lib`
Aug 26
next sibling parent reply Hasen Judy <hasen.judy gmail.com> writes:
On Saturday, 26 August 2017 at 10:02:03 UTC, drug wrote:
 It's like C++. If you use Linux then:
 ```
 dmd <list of your .d files like you do> -L/path/to/lib 
 -llibrarynamewithoutlibprefix
 ```
 or example
 ```
 dmd myapp.d -L../otherproject/lib -lcool
 ```
 line above compiles `myapp.d` file and links it with library 
 `libcool` that is place in directory `../otherproject/lib`
Thanks for your response! So if I may make a guess, when you include a dependency in a dub project, what it ends up doing is compiling the dependency separately into a lib file then statically link the lib with your project?
Aug 26
parent drug <drug2004 bk.ru> writes:
26.08.2017 13:05, Hasen Judy пишет:
 On Saturday, 26 August 2017 at 10:02:03 UTC, drug wrote:
 It's like C++. If you use Linux then:
 ```
 dmd <list of your .d files like you do> -L/path/to/lib 
 -llibrarynamewithoutlibprefix
 ```
 or example
 ```
 dmd myapp.d -L../otherproject/lib -lcool
 ```
 line above compiles `myapp.d` file and links it with library `libcool` 
 that is place in directory `../otherproject/lib`
Thanks for your response! So if I may make a guess, when you include a dependency in a dub project, what it ends up doing is compiling the dependency separately into a lib file then statically link the lib with your project?
Yes
Aug 26
prev sibling parent Mike Wey <mike-wey example.com> writes:
On 26-08-17 12:02, drug wrote:
 26.08.2017 12:03, Hasen Judy пишет:
 Building simple programs without dub is easy, just pass a list of .d 
 source files to `dmd` or `ldc2`.

 What if I want to include a 3rd party library? Surely before dub 
 existed, people were incorporating other libraries in their projects.

 I want to learn how this works from first principles. I've been 
 working with dynamic/interpreted languages for too long, I forgot what 
 it's like to build native programs without a dependency manager.

 Any help would be appreciated!
It's like C++. If you use Linux then: ``` dmd <list of your .d files like you do> -L/path/to/lib -llibrarynamewithoutlibprefix ``` or example ``` dmd myapp.d -L../otherproject/lib -lcool ``` line above compiles `myapp.d` file and links it with library `libcool` that is place in directory `../otherproject/lib`
You will need an extra `-L` to pass things to the linker with dmd. ``` dmd myapp.d -L-L../otherproject/lib -L-lcool ``` -- Mike Wey
Aug 26
prev sibling next sibling parent reply Adam D. Ruppe <destructionator gmail.com> writes:
On Saturday, 26 August 2017 at 09:03:03 UTC, Hasen Judy wrote:
 Building simple programs without dub is easy, just pass a list 
 of .d source files to `dmd` or `ldc2`.

 What if I want to include a 3rd party library?
It is also easy, just pass the list of its d source files to the compiler as well. Quite trivial, really.
Aug 26
parent Jonathan Marler <johnnymarler gmail.com> writes:
On Saturday, 26 August 2017 at 12:45:31 UTC, Adam D. Ruppe wrote:
 On Saturday, 26 August 2017 at 09:03:03 UTC, Hasen Judy wrote:
 Building simple programs without dub is easy, just pass a list 
 of .d source files to `dmd` or `ldc2`.

 What if I want to include a 3rd party library?
It is also easy, just pass the list of its d source files to the compiler as well. Quite trivial, really.
Note that yesterday I pushed a PR to dmd that allows you to import 3rd party libraries without having to list all their d source files on the command line (https://github.com/dlang/dmd/pull/7099). So long as the compiler knows where to find them (using -I<path>), if you specify -ci (compile imports) it will automatically treat all unknown imports as if they were specified on the command line.
Aug 26
prev sibling parent zabruk70 <sorry noem.ail> writes:
On Saturday, 26 August 2017 at 09:03:03 UTC, Hasen Judy wrote:
 What if I want to include a 3rd party library? Surely before 
 dub existed, people were incorporating other libraries in their 
 projects.
sometimes pragma("lib", ...) very usefull (if i understand you correctly) https://dlang.org/spec/pragma.html#lib
Aug 27