首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有可能让CMake同时构建静态库和共享库?

有没有可能让CMake同时构建静态库和共享库?
EN

Stack Overflow用户
提问于 2010-01-28 11:20:24
回答 5查看 85.6K关注 0票数 161

同样的源代码,所有这些,只是想要一个静态和共享的版本。一苇可航?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-01-28 11:42:44

是的,这是相当简单的。只需使用两个"add_library“命令:

add_library(MyLib SHARED source1.c source2.c)
add_library(MyLibStatic STATIC source1.c source2.c)

即使您有许多源文件,也可以将源文件列表放在一个Cmake变量中,这样做仍然很容易。

在Windows上,你可能应该给每个库起一个不同的名字,因为共享和静态都有一个".lib“文件。但是在Linux和Mac上,你甚至可以给这两个库起相同的名字(例如libMyLib.alibMyLib.so):

set_target_properties(MyLibStatic PROPERTIES OUTPUT_NAME MyLib)

但我不建议将该库的静态版本和动态版本命名为相同的名称。我更喜欢使用不同的名称,因为对于链接到库的工具,在编译行上选择静态链接与动态链接更容易。通常我会选择像libMyLib.so (共享)和libMyLib_static.a (静态)这样的名称。(这些将是linux上的名称。)

票数 139
EN

Stack Overflow用户

发布于 2013-09-01 02:03:25

通常不需要为您的目的复制ADD_LIBRARY调用。只需利用

$> man cmake | grep -A6 '^ *BUILD_SHARED_LIBS$' 
   BUILD_SHARED_LIBS
          Global flag to cause add_library to create shared libraries if on.

          If present and true, this will cause all libraries to be built shared unless the library was
          explicitly added as a static library.  This variable is often added to projects as an OPTION
          so  that each user of a project can decide if they want to build the project using shared or
          static libraries.

在构建时,首先(在一个源代码外目录中)使用-DBUILD_SHARED_LIBS:BOOL=ON,然后使用OFF

票数 28
EN

Stack Overflow用户

发布于 2020-07-23 15:57:29

正如前面的答案中所建议的那样,可以将所有东西都打包在相同的编译气息中,但我建议不要这样做,因为最终这是一种只适用于简单项目的技巧。例如,在某些情况下,您可能需要针对不同版本的库使用不同的标志。在Windows上,标志通常用于在导出或不导出符号之间切换)。或者如上所述,您可能希望将.lib文件放到不同的目录中,这取决于它们是对应于静态库还是共享库。这些障碍中的每一个都需要一个新的技巧。

这可能是显而易见的,但是一个以前没有提到的替代方案是将库的类型作为参数:

set( ${PROJECT_NAME}_LIBTYPE CACHE STRING "library type" )
set_property( CACHE ${PROJECT_NAME}_LIBTYPE PROPERTY STRINGS "SHARED;STATIC" )
add_library( ${PROJECT_NAME} ${PROJECT_NAME}_LIBTYPE ${SOURCE_FILES} )

将库的共享和静态版本放在两个不同的二叉树中,可以更容易地处理不同的编译选项。我看不出保持编译树的不同有什么严重的缺点,特别是如果你的编译是自动化的。

请注意,即使您打算使用中间OBJECT库(具有上面提到的警告,因此您需要一个令人信服的理由这样做)来实现编译的互互化,您仍然可以将端库放在两个不同的项目中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2152077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档