包含其他库的 CMake add_library

CMake add_library containing other libraries

我正在设计一组可以在我的其他 C++ 项目中 link 编辑的库。为了使馆藏易于使用,我希望能够 link 到各个图书馆,或者 link 到一个包含所有其他图书馆的主图书馆。我如何在 CMakeLists.txt 文件中指定它?

例如:

add_library(library1 SHARED
    file1.cpp
    file2.cpp
)

add_library(library2 SHARED
    file3.cpp
    file4.cpp
)

# Define a master library that contains both of the others
add_library(master_library SHARED
    library1
    library2
)

是否有使用 CMake 获得此功能的正确方法?


编辑:

此问题与以下问题不重复:

这仅与共享库有关,与静态库或可执行文件无关。

只需在您的项目中创建一个函数:

function(link_all_libs TARGET)
    target_link_libraries(TARGET library1 library2)
endfunction(link_all_libs)

现在您可以简单地:

link_all_libs(myapp)

这个解决方案似乎有效。

add_library(library1 SHARED
    file1.cpp
    file2.cpp
)

add_library(library2 SHARED
    file3.cpp
    file4.cpp
)

# dummy file is required to avoid a cmake error, but this
# "dummy" file serves no other purpose and is empty.
add_library(master_library SHARED
    dummy.cpp
)

# Link the master library with the other libraries
target_link_libraries(master_library
    library1
    library2
)

完成此操作后,我能够仅使用主库来编译和link代码。