Вам не нужен отдельный файл CMakeLists.txt для самостоятельного создания целей. Скажем, у вас есть один верхний уровень CMakeLists.txt с:
ADD_LIBRARY(lib1 ${all_lib1_files})
ADD_LIBRARY(lib2 ${all_lib2_files})
ADD_EXECUTABLE(exe1 ${all_exe1_files})
TARGET_LINK_LIBRARIES(lib2 lib1) # lib2 now depends on lib1
TARGET_LINK_LIBRARIES(exe1 lib2) # exe1 now depends on lib2 and lib1
Затем вы можете собрать только lib1, запустив make lib1
или msbuild lib1.vcxproj
и т. Д. Вы можете добиться того же, имея отдельные файлы CMakeLists.txt для каждой цели - это ваше дело, если вы считаете, что оно того стоит.
Если ваш проект импортирует эти цели, используя FIND_LIBRARY
или FIND_PACKAGE
, то они не будут восстановлены, если они не обновлены. В конечном итоге, если вы хотите, чтобы устаревшие зависимости автоматически перестраивались, вам нужно сообщить CMake об источниках и правилах для зависимой цели, то есть в файле CMakeLists.txt необходимо добавить цель, используя ADD_LIBRARY
или ADD_EXECUTABLE
.
Тогда вам не нужно ссылаться на каталог INSTALL (за исключением команд INSTALL
, которые я представляю), поскольку CMake будет неявно использовать местоположения сборки libs / exes, а не места установки при связывании целей.