CMake的:我怎样才能建立一个共享和静态库,不需要重新编译源两倍(CMake: How can I

2019-09-24 03:52发布

我想建立同一库的同时使用静态和共享版本的描述是有可能得到的CMake构建同一个库的同时使用静态和共享版本?

然而,源编了两次,为每个这是没有必要的版本。 有什么办法避免这种情况?

目前,我有:

add_library(${LIB} SHARED ${${LIB}_srcs})

add_library(${LIB}_static STATIC ${${LIB}_srcs})

我需要做什么才能改变,只需要编译一次? 仅供参考。 我有同样的编译器标志和定义。

Answer 1:

这是不可行的,不推荐使用 ,以创建一组相同的目标文件的共享/静态库版本-至少在许多平台上。

连接到一个共享库目标文件必须被编译为位置无关的代码 ( -fpic / -FPIC Linux / Solaris上等) -而你的可执行文件和静态库(通常情况下)不包含位置无关的代码。 在另一方面,共享库权衡由于间接性的共享代码的网页与运行时开销。 因为这些间接寻址是不必要的静态库和二进制文件,与位置无关的代码提供仅与放入系统的缺点。 因此,如果你想创建两个共享和静态库版本,你需要创建两套不同的目标文件(其中一个是位置独立的,其中一个是相反的)。



Answer 2:

由于CMake的2.8.8您可以使用对象库: CMake的:对于一个lib内置再用对象文件到另一个LIB目标 。

又见http://www.cmake.org/Wiki/CMake/Tutorials/Object_Library



文章来源: CMake: How can I build a shared and a static library without recompiling the sources twice