我有三个共享库: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)
用于noise
和noiseutils
库,将add_library([...] SHARED)
用于medium
库。然后只需添加target_link_libraries(medium noise noiseutils)
即可完成工作。
关于c++ - 带有两个自己的CMakeLists.txt的两个子项目的CMakeLists.txt只需要创建一个包含所有内容的.so库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20602059/