gpt4 book ai didi

compilation - CMake:如何在不重新编译源代码的情况下构建共享库和静态库两次

转载 作者:行者123 更新时间:2023-12-04 00:58:53 27 4
gpt4 key购买 nike

我想按照 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})

我需要更改什么才能只编译一次?仅供引用。我有相同的编译器标志和定义。

最佳答案

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

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

关于compilation - CMake:如何在不重新编译源代码的情况下构建共享库和静态库两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12899582/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com