Использование CMake с несколькими компиляторами для одного языка - PullRequest
20 голосов
/ 03 марта 2012

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

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

Ответы [ 3 ]

13 голосов
/ 03 марта 2012

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

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

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

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

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

3 голосов
/ 06 марта 2012

Возможно, вы захотите взглянуть на ExternalProject: http://www.kitware.com/media/html/BuildingExternalProjectsWithCMake2.8.html

0 голосов
/ 17 января 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...