W tym przypadku polecam używanie pojedynczego katalogu build /. CMake prawdopodobnie wygeneruje osobne katalogi lib1, lib2 i lib3.
Przełączanie pomiędzy STATIC vs Shared można zrobić za pomocą flagi BUILD_SHARED_LIBS (sprawdź dokumentację add_library)
W odniesieniu do organizacji CMakeLists.txt, wybór należy do Ciebie:
Ty może zbudować pojedynczy plik CMakeLists.txt zawierający wiele pozycji add_library. Ma to tę zaletę, że otrzymasz pojedynczy CMakeLists.txt, który niektórzy ludzie mogą preferować, gdy projekty są proste.
Można podzielić projekt na kilka CMakeLists.txt rozmieszczonych nad LIB1, LIB2 i lib3 katalogów i użyć CMakeLists.txt korzeniowy z add_subdirectory. Zaletą tej konfiguracji jest to, że łatwiej będzie wygenerować pliki kompilacji za pomocą jednego połączenia (w katalogu build /), ale można wtedy łatwo wkroczyć do np. lib3/i wywołaj make/msbuild. CUpewnij zagwarantuje, że zależności są zbudowane prawidłowo
Przykład 1:
project(P)
# Setup lib1
set (LIB1_SOURCES ...) # Fill in your set of source-files here...
add_library(lib1 ${LIB1_SOURCES})
# Do similar for lib2 and lib3
target_link_libraries(lib2 lib1) # Indicate that lib1 is needed for lib2
target_link_libraries(lib3 lib1 lib2) # Indicate that lib2 and lib1 are needed for lib3
Przykład 2:
project(P)
add_subdirectory(lib1)
add_subdirectory(lib2)
add_subdirectory(lib3)
W każdym podkatalogu następnie napisać swój CMakeLists.txt. Na przykład. w przypadku lib3:
project(lib3)
set(LIB3_SOURCES ...) # Setup the list of sources here.
add_library(lib3 ${LIB3_SOURCES})
# You can refer to other libraries which should be available from the root cmakelists.
target_link_libraries(lib3 lib1 lib2)
Świetnie, dziękuję. – Cartesius00