CMake:如何在不重新编译源的情况下构建共享库和静态库

时间:2012-10-15 16:07:00

标签: compilation cmake

我想构建与Is it possible to get CMake to build both a static and shared version of the same library?

所描述的相同库的静态和共享版本

但是,源代码被编译两次,每个版本一个,这是不必要的。有什么方法可以避免这种情况吗?

目前我有:

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

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

为了只需要编译一次,我需要更改什么?仅供参考。我有相同的编译器标志并定义。

2 个答案:

答案 0 :(得分:8)

从同一组目标文件创建共享/静态库版本是unfeasible and not recommended - 至少在许多平台上。

链接到共享库的对象文件必须在Linux / Solaris等上编译为position independent code-fpic / -FPIC - )而您的可执行文件和静态库(通常)不会t包含与位置无关的代码。另一方面,由于间接性,共享库通过运行时开销来共享代码页。由于这些间接对于静态库和二进制文件是不必要的,因此位置无关代码仅提供了与thoses相关的缺点。因此,如果要创建共享库和静态库版本,则需要创建两组不同的目标文件(一组与位置无关,另一组则相反)。

答案 1 :(得分:5)