我有三个共享库:lib_1.so,lib_2.so和lib_3.so。 如何只创建一个名为lib_all.so的库,它们将包含所有三个库?
我正在尝试编译一些源文件,其中包含来自两个子项目/子目录的文件,每个子项目(2)都有CMakeLists.txt,但我想创建一个.so库,而不是三个。
加入 我想要那个medium.so还包含libnoise.so和noiseutils.so,这是我的CMakeLists.txt
project (map)
cmake_minimum_required(VERSION 2.8)
find_package(PythonLibs)
include_directories (${PYTHON_INCLUDE_DIRS})
find_package(Boost 1.45.0 COMPONENTS python)
include_directories (${Boost_INCLUDE_DIRS})
set (LIBNOISE_PATH ${MY_SOURCE_DIR}/libnoise)
set (LIBNOISEUTILS_PATH ${MY_SOURCE_DIR}/noiseutils)
add_subdirectory(libnoise)
add_subdirectory(noiseutils)
add_library (
map SHARED
Wrapped.cpp
)
target_link_libraries (
map
boost_python
${PYTHON_LIBRARIES}
${Boost_LIBRARIES}
)
linoise和noiseutils是具有自己的CMakeLists.txt
的目的地答案 0 :(得分:2)
您无法将多个共享库合并到一个共享库中。您也无法将多个静态库合并到一个静态库中。
但是,您可以将多个静态库合并到一个共享库中。
这更多是底层编译器的限制,而不是CMake的限制。您可以将静态库与对象文件和共享库视为可执行文件:您可以将多个目标文件链接到单个可执行文件中,但其他排列组合并不能很好地工作。
因此,在您的情况下,对add_library([...] STATIC)
和noise
库使用noiseutils
,为add_library([...] SHARED)
库使用medium
。然后只需添加target_link_libraries(medium noise noiseutils)
即可完成作业。