En este caso, recomendaría el uso de un solo compilación/directorio. CMake probablemente genere directorios lib1, lib2 y lib3 separados allí.
El cambio entre ESTÁTICO vs COMPARTIDO se puede hacer mediante el uso de la bandera BUILD_SHARED_LIBS (consulte la documentación add_library)
Con respecto a la organización CMakeLists.txt, la elección es suya:
Usted puede construir un solo CMakeLists.txt que tiene múltiples entradas add_library. Esto tiene la ventaja de que obtendrá un solo CMakeLists.txt, que algunas personas pueden preferir cuando los proyectos son simples.
Puede dividir su proyecto en múltiples CMakeLists.txt distribuidas en sus directorios lib1, lib2 y lib3 y utilizar una raíz cmakelists.txt con add_subdirectory. El beneficio de esta configuración es que será más fácil generar los archivos de compilación con una sola llamada (en su compilación/directorio), pero podría pasar fácilmente a, p. Ej. lib3/y llama a make/msbuild allí. CMake se asegurará de que las dependencias se construyen correctamente
Ejemplo 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
Ejemplo 2:
project(P)
add_subdirectory(lib1)
add_subdirectory(lib2)
add_subdirectory(lib3)
En cada subdirectorio, a continuación, escribe su CMakeLists.txt. P.ej. en caso de 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)
Genial, gracias. – Cartesius00