Подтвердить что ты не робот

Использование CMake с несколькими компиляторами для одного и того же языка

Кажется, что CMake довольно укоренился в своем представлении, что для всех исходных файлов С++ должен быть один и только один CMAKE_CXX_COMPILER. Я не могу найти способ переопределить это для каждой цели. Это делает комбинацию компиляции хоста и кросс в одном CMakeLists.txt очень сложным с помощью встроенных средств CMake.

Итак, мой вопрос: какой лучший способ использовать несколько компиляторов для одного и того же языка (т.е. С++)?

4b9b3361

Ответ 1

Это невозможно сделать с помощью CMake.

CMake сохраняет только один набор свойств компилятора, который совместно используется всеми объектами в файле CMakeLists.txt. Если вы хотите использовать два компилятора, вам нужно запустить CMake дважды. Это даже верно для, например, построение 32-битных и 64-битных двоичных файлов из одной и той же инструментальной цепочки компилятора.

Быстрый и грязный способ использования пользовательских команд. Но тогда вы получаете то, что в основном прославленные shell-скрипты, что, вероятно, не то, что вы хотите.

Чистым решением является: Не помещайте их в тот же CMakeLists.txt! В любом случае вы не можете связывать между различными архитектурами, поэтому им не нужно находиться в одном файле. Вы можете уменьшить избыточность, реорганизовывая общие части сценариев CMake в отдельные файлы и include() их.

Основным недостатком здесь является то, что вы теряете возможность создавать с помощью одной команды, но вы можете решить это, написав обертку на своем любимом языке сценариев, который заботится о вызове различных файлов make файлов CMake.

Ответ 3

Чтобы продлить ответ @Bill Hoffman: Создайте свой проект как супер-сборку, используя какой-то шаблон, например, здесь https://github.com/Sarcasm/cmake-superbuild который будет настраивать как зависимости, так и ваш проект как внешний проект (автономная среда cmake configure/build/install).