Прежде всего, вы должны использовать add_subdirectory()
вместо subdirs()
, что устарело . Таким образом вы получаете более точный контроль над порядком обработки.
Во-вторых, поскольку все зависит от инструмента2, сначала вы должны собрать инструмент2.
main-tool/CMakeLists.txt:
add_subdirectory{"tool2"}
add_subdirectory{"tool1"}
Не добавляйте еще одну команду add_subdirectory
в каталог tool1. Есть два подхода, которые вы можете использовать для доступа к tool2 из сборки tool1.
- Сначала вы можете определить некоторые переменные cmake в главном CMakeLists.txt верхнего уровня, связанные с tool2, а затем заполнить эти переменные в сборке tool2. Возможно, вам придется использовать директиву PARENT_SCOPE для
set
этих переменных из подкаталога tool2. Затем используйте эти переменные для доступа к tool2 из подкаталога tool1.
- Кроме того, вы можете собрать все три инструмента (tool2, tool1 и main tool, в указанном порядке) из файла CMakeLists верхнего уровня. Файл сборки может быть длинным, но он избавляет от головной боли, пытаясь управлять областью действия переменных cmake. Такой подход я обычно использую и рекомендую.
Подводя итог, я рекомендую "один большой файл CMakeLists.txt". Если это не становится действительно, действительно большим.