views:

162

answers:

2

Hello,

How can I specify some unique flags for DLL only builds. By default libtool adds -DDLL_EXPORT which is fine for most projects that follow GNU conventions, but if I work, for example, with Boost I may need to specify for my library flags: -DDLL_EXPORT -DBOOST_ALL_DYN_LINK for DLL only builds, also sometimes I want conditional builds so I need some specific defines for DLL/SO build.

Unfortunately I can't find a way how to do this with libtool, what flags should I use?

P.S.: Don't even try to suggest to move to CMake.

Example:

I use library foo that links to bar and requires -DBAR_EXPORTS to get symbols for dynamic library only.

Is there something like

 libfoo_la_dynamic_CXXFLAGS = -DBAR_EXPORTS

Anybody?

Alternative Solution: (quite ugly)

Create a file `defines.h

#if defined(PIC) || defined(DLL_EXPORT)
#define BAR_EXPORTS
#endif

And then:

 libfoo_la_CXXFLAGS += -include defines.h

Ugly but should work.

A: 

Not that pretty, but could you use a conditional to check if DLL_EXPORT is defined and if it is define the others you need?

I'm not that good with autotools, I prefer CMake but you seem quite against that.

Adam W
`am_conditional` is project global, but, generally when you build with libtool you build both static and shared library. So this is not real solution.
Artyom
A: 

You can disable building shared library by default with

LT_INIT([disable-shared])

then you can use AM_CONDITIONAL combined with --enabled-shared and set the extra definitions if shared library is explicitly requested. IOW, enable building static or shared, but not both at the same time.

mloskot
Isn't there any other way?
Artyom
@Artyom Perhaps there is, but I'm not aware of it. I use Autotools only on Unix and I avoid using it on Windows for building DLL.
mloskot