我想建立同一库的同时使用静态和共享版本的描述是有可能得到的CMake构建同一个库的同时使用静态和共享版本?
然而,源编了两次,为每个这是没有必要的版本。 有什么办法避免这种情况?
目前,我有:
add_library(${LIB} SHARED ${${LIB}_srcs})
add_library(${LIB}_static STATIC ${${LIB}_srcs})
我需要做什么才能改变,只需要编译一次? 仅供参考。 我有同样的编译器标志和定义。
我想建立同一库的同时使用静态和共享版本的描述是有可能得到的CMake构建同一个库的同时使用静态和共享版本?
然而,源编了两次,为每个这是没有必要的版本。 有什么办法避免这种情况?
目前,我有:
add_library(${LIB} SHARED ${${LIB}_srcs})
add_library(${LIB}_static STATIC ${${LIB}_srcs})
我需要做什么才能改变,只需要编译一次? 仅供参考。 我有同样的编译器标志和定义。
这是不可行的,不推荐使用 ,以创建一组相同的目标文件的共享/静态库版本-至少在许多平台上。
连接到一个共享库目标文件必须被编译为位置无关的代码 ( -fpic
/ -FPIC
Linux / Solaris上等) -而你的可执行文件和静态库(通常情况下)不包含位置无关的代码。 在另一方面,共享库权衡由于间接性的共享代码的网页与运行时开销。 因为这些间接寻址是不必要的静态库和二进制文件,与位置无关的代码提供仅与放入系统的缺点。 因此,如果你想创建两个共享和静态库版本,你需要创建两套不同的目标文件(其中一个是位置独立的,其中一个是相反的)。
由于CMake的2.8.8您可以使用对象库: CMake的:对于一个lib内置再用对象文件到另一个LIB目标 。
又见http://www.cmake.org/Wiki/CMake/Tutorials/Object_Library