是否可以为DLL / SO构建指定特定的标志/定义?

时间:2010-01-01 14:08:16

标签: c++ dll build-automation automake libtool

如何为仅DLL构建指定一些唯一标志。默认情况下,libtool添加-DDLL_EXPORT,这对于遵循GNU约定的大多数项目都很好,但是如果我工作,例如,使用Boost,我可能需要为我的库标志指定:-DDLL_EXPORT -DBOOST_ALL_DYN_LINK仅用于DLL构建,有时我也想要条件构建,所以我需要一些DLL / SO构建的特定定义。

不幸的是我找不到如何用libtool做这个的方法,我应该使用什么标志?

P.S。:甚至不打算建议搬到CMake。

示例:

我使用链接到bar的库foo并且需要-DBAR_EXPORTS来获取动态库的符号。

是否有像

这样的东西
 libfoo_la_dynamic_CXXFLAGS = -DBAR_EXPORTS

有人吗

替代解决方案:(非常难看)

创建一个文件`defines.h

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

然后:

 libfoo_la_CXXFLAGS += -include defines.h

丑陋但应该工作。

2 个答案:

答案 0 :(得分:0)

不是那么漂亮,但是你可以使用conditional检查DLL_EXPORT是否已定义,是否定义了你需要的其他内容?

我对autotools不太好,我更喜欢CMake,但你似乎很反对。

答案 1 :(得分:0)

您可以默认使用

禁用构建共享库
LT_INIT([disable-shared])

然后您可以使用AM_CONDITIONAL--enabled-shared结合使用,并在明确请求共享库时设置额外的定义。 IOW,启用构建静态或共享,但不能同时构建两者。