我有三个共享库: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的子目录

最佳答案

您不能将多个共享库合并到一个共享库中。您也不能将多个静态库合并到一个静态库中。

但是,您可以做的是将多个静态库合并到一个共享库中。

这更多是对基础编译器的限制,而不是CMake之一。可以将静态库当作对象文件,将共享库当作可执行文件:将多个目标文件链接到一个可执行文件中,但是其他排列的效果并不理想。

因此,在您的情况下,请将add_library([...] STATIC)用于noisenoiseutils库,将add_library([...] SHARED)用于medium库。然后只需添加target_link_libraries(medium noise noiseutils)即可完成工作。

关于c++ - 带有两个自己的CMakeLists.txt的两个子项目的CMakeLists.txt只需要创建一个包含所有内容的.so库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20602059/

10-11 20:22
查看更多