有没有办法自动使库静态或动态?

时间:2009-05-10 17:23:31

标签: c++ visual-studio gcc cross-platform

我知道这可能是一个很长的镜头,但它在这里。我有几个活动项目,每个都有子项目库,在主项目编译时编译。这些库是动态的,但最近有一个问题可能需要这些库(大多数是在项目之间共享)是静态的而不是动态的。

现在,我很确定有人设计了一个系统,我可以在这个系统中创建一个可以作为静态编译到项目中的库,或者像一个简单的预处理器指令或类似东西的动态库。如果没有,我会把梦想带走。

编辑:

看起来像CMake可能是它,但是,除了构建东西,我还想从我的代码中缓解__declspec(dllimport)和__declspec(dllexport) - 这样我就可以自动在静态和动态之间切换。虽然使用预处理器宏相当容易,但我想也许人们已经在使用某种形式的系统?

3 个答案:

答案 0 :(得分:2)

我喜欢使用CMake来避免这些类型的问题。

答案 1 :(得分:1)

如果您希望它是跨平台的,您将不得不使用像SCons或Make这样的工具,并根据您传入的任何命令变量设置不同的编译器/链接器参数。您必须为每个平台执行此操作和你支持的链接类型组合。

在Visual Studio的配置管理器中(您不仅限于发布和调试),然后您可以拥有ReleaseStatic和ReleaseDynamic以及您可以想到的任何其他配置。然后,您只需为每个配置设置正确的编译器和链接器开关。

答案 2 :(得分:-1)

下载cURL源代码并查看其设置。它可以在Windows中为DLL或静态构建libcurl,在Unix中构建静态或共享对象。