具有多个类的动态库的CMake组织

时间:2013-02-07 20:46:32

标签: c++ cmake

我正在开发一个项目,动态库会加载一系列相关的类。这些类可能依赖于类似的实用程序类,但通常是相互依赖的。我目前的结构是:

MainLibraryDirectory/
    CMakeLists.txt
    mainlibrary.cpp //Provides access to underlying classes
    mainlibrary.h
    /Class1/
        CMakeLists.txt
        class1.cpp
        class1.h
    /Class2/
        CMakeLists.txt
        class2.cpp
        class2.h

我的问题涉及Class1和Class2 CMakeLists.txt。我目前的方法是在主cmake中设置三个变量,然后:

set(my_sources ${my_sources} ${CMAKE_CURRENT_SOURCE_DIR}/class1.cpp PARENT_SCOPE)
set(my_headers ${my_headers} ${CMAKE_CURRENT_SOURCE_DIR}/class1.h PARENT_SCOPE)
set(required_libraries ${required_libraries} boost_bla) 

有更好的方法吗?更具体地说,我希望能够在最低include_directory

中使用CMakeLists.txt等函数

1 个答案:

答案 0 :(得分:2)

您可以将Class1和Class2构建到单独的静态库中,然后将它们链接到主库中。

这样的事情:

# Class1/CMakeLists.txt
project(class1)
add_library(class1 STATIC class1.cpp class1.h)

# Class2/CMakeLists.txt
project(class2)
add_library(class2 STATIC class2.cpp class2.h)

# CMakeLists.txt
project(mainlibrary)
add_subdirectory(Class1)
add_subdirectory(Class2)
add_library(mainlibrary SHARED mainlibrary.h mainlibrary.cpp)
target_link_libraries(mainlibrary class1 class2)