我想构建与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})
为了只需要编译一次,我需要更改什么?仅供参考。我有相同的编译器标志并定义。
答案 0 :(得分:8)
从同一组目标文件创建共享/静态库版本是unfeasible and not recommended - 至少在许多平台上。
链接到共享库的对象文件必须在Linux / Solaris等上编译为position independent code(-fpic
/ -FPIC
- )而您的可执行文件和静态库(通常)不会t包含与位置无关的代码。另一方面,由于间接性,共享库通过运行时开销来共享代码页。由于这些间接对于静态库和二进制文件是不必要的,因此位置无关代码仅提供了与thoses相关的缺点。因此,如果要创建共享库和静态库版本,则需要创建两组不同的目标文件(一组与位置无关,另一组则相反)。
答案 1 :(得分:5)