2013-12-16 44 views
1

我有三個共享庫:lib_1.so,lib_2.so和lib_3.so。 如何創建一個名爲lib_all.so的包含所有三個庫的庫?CMakeLists.txt和兩個帶有CMakeLists.txt的子項目需要創建一個.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是sudirectories與自己的CMakeLists.txt

+0

不可能,除非你有三個來源。如果它們是靜態庫(.a),那就行了。 –

+0

@SevaAlekseyev我有所有三個來源,但是當我用cmake做它創建三,我需要一個 –

+0

@PaolaJ然後,我建議重新形成你的問題。 – peterh

回答

2

你無法將多個共享庫合併到一個共享庫中。您也無法將多個靜態庫合併到一個靜態庫中。

然而,你可以做的是將多個靜態庫合併成一個共享庫。

這是更多的基礎編譯器的限制,而不是CMake之一。像對待可執行文件一樣,可以像處理對象文件和共享庫一樣考慮靜態庫:您可以將多個對象文件鏈接到一個可執行文件中,但其他排列方式並不能很好地工作。

所以你的情況,使用add_library([...] STATIC)noisenoiseutils庫和add_library([...] SHARED)medium庫。然後只需添加一個target_link_libraries(medium noise noiseutils)完成這項工作。

相關問題