gpt4 book ai didi

c++ - CMakeLists.txt 有两个自己的 CMakeLists.txt 子项目只需要创建一个 .so 库,其中包含所有

转载 作者:行者123 更新时间:2023-11-30 04:10:30 26 4
gpt4 key购买 nike

我有三个共享库: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 的限制。将静态库视为目标文件,将共享库视为可执行文件:您可以将多个目标文件链接到一个可执行文件中,但其他排列方式并不能很好地工作。

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

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

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