如何为仅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
有人吗strong>
替代解决方案:(非常难看)
创建一个文件`defines.h
#if defined(PIC) || defined(DLL_EXPORT)
#define BAR_EXPORTS
#endif
然后:
libfoo_la_CXXFLAGS += -include defines.h
丑陋但应该工作。
答案 0 :(得分:0)
不是那么漂亮,但是你可以使用conditional检查DLL_EXPORT是否已定义,是否定义了你需要的其他内容?
我对autotools不太好,我更喜欢CMake,但你似乎很反对。
答案 1 :(得分:0)
您可以默认使用
禁用构建共享库LT_INIT([disable-shared])
然后您可以使用AM_CONDITIONAL
与--enabled-shared
结合使用,并在明确请求共享库时设置额外的定义。 IOW,启用构建静态或共享,但不能同时构建两者。