Проект cmake создает только один конкретный исполняемый файл (и его зависимости)
У меня есть проект CMake с примерно такой структурой:
.
|-- library1
| |-- CMakeLists.txt
|-- library2
| |-- CMakeLists.txt
|-- executables
| |-- CMakeLists.txt
в executables
я генерирую свои 2 исполняемых файла. Интересно, можно ли было просто сгенерировать один исполняемый файл и его зависимости вместо всех. Я слышал что-то о Cmake --target
вариант, но я не могу заставить его работать с cmake/3.13.4
,
1 ответ
Здесь есть пара потенциальных проблем. Во-первых, типичный рабочий процесс CMake помещает build
папка, как брат к файлу CMake верхнего уровня. Итак, ваша файловая иерархия должна выглядеть примерно так:
.
|-- CMakeLists.txt
|-- library1
| |-- CMakeLists.txt
|-- library2
| |-- CMakeLists.txt
|-- executables
| |-- CMakeLists.txt
|-- build <------------ Run CMake commands from here.
Это изолирует все сгенерированные CMake файлы в build
папка. Во-вторых, вы должны осторожно запускать этапы сборки CMake в нужном месте. Мы можем запустить все изнутри build
папка, например:
Чтобы сгенерировать систему сборки, запустите
cmake ..
изbuild
каталог. Этот первый шаг должен указывать на файл CMake верхнего уровня.Чтобы построить (или скомпилировать) конкретную цель, скажем, она называется
MyExecutable1
, бегатьcmake --build . --target MyExecutable1
изbuild
каталог. Вы должны обязательно указать--build
флаг наbuild
папка, а не файл CMake верхнего уровня на этот раз. Кроме того, имя цели, которое нужно указать в этой команде, должно соответствовать имени цели, используемому вadd_executable()
, а не название проекта или что-то еще.Как всегда, при получении ошибок / проблем при попытке запустить CMake, это помогает очистить кеш (удалить
build/CMakeCache.txt
) или просто удалитеbuild
Папка в целом и начать все заново.