2013-02-07 62 views
0

我正在一個項目,其中一個動態庫加載一系列相關的類。這些類可能依賴於類似的工具類,但通常是相互依賴的。我目前的結構是: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

回答

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) 
+0

我想這樣做,以及...這是一種「黑客」,因爲我不能簡單地在一個CMake的編譯和在其他環節... – Constantin

+0

我不明白你的意思?有了這個設置,你可以簡單地編譯mainlibrary,並且它的依賴關係Class1和Class2也將被編譯。 – Kleist

+0

我同意它會工作,對不起。 – Constantin