Для 1 вопроса:
В lib2/CMakeLists.txt
вы должны поместить это:
target_link_libraries(lib2 lib1)
И в app / CMakeLists.txt:
target_link_libraries(app lib2)
Теперь, если вы попытаетесь собрать приложение, CMake проверит, обновлена ли lib2, а если нет - перестройте lib1 и lib2.
Для вопроса 2:
Вы можете защитить add_subdirectory(lib3)
вызов с помощью блока if()
на основе переменной option()
.
Другой способ - в lib3 / CMakeLists.txt:
add_library(lib3 ${SRCS} EXCLUDE_FROM_ALL)
Это будетзаставить CMake не добавлять цель lib3
в цель all
.Эта цель все еще будет создана, если вы пытаетесь что-то построить в зависимости от нее, или выполните make lib3
вручную.