CMake создает несколько целей в разных каталогах сборки

У меня есть следующая структура CMake:

CMakelists.txt
toolchain.cmake
folder1
   ----CMakelists.txt
folder2
   ----CMakelists.txt
etc..

Мой файл CMakelists.txt первого уровня включает в себя другие подкаталоги. Теперь я хочу построить свой код для другой цели.

Ручной способ это:

1.
    mkdir hostBuild
    cd hostBuild
    cmake ..
    make

2.
    mkdir crossBuild
    cd crossBuild
    cmake .. --DCMAKE_TOOLCHAIN_FILE=toolchain.cmake
    make

Возможно ли, что этот процесс может выполняться автоматически?

Например, мне просто нужно бежать cmake . на моем первом уровне.

Возможно ли что-то подобное?

1 ответ

Решение

Нет. Рекомендую просто поместить ваши ручные шаги в сценарий оболочки.

CMake может одновременно обрабатывать только одну среду компилятора /make (если вы переключаете компилятор, вам нужен другой каталог двоичного вывода).

Особенно файл инструментария, который содержит SET(CMAKE_SYSTEM_NAME ...) меняет весь результат процесса конфигурации / генерации.

Для получения подробной информации о том, что CMake видит: CMake: В каком порядке анализируются файлы (Cache, Toolchain, …)?

И вы можете использовать некоторые параметры командной строки CMake в вашем скрипте оболочки:

if [ ! -d hostBuild ]; then
    cmake -E make_directory hostBuild
    cmake -E chdir hostBuild cmake ..
fi
cmake --build hostBuild
...
Другие вопросы по тегам