CMake не использует соответствующий выходной аргумент командной строки для компилятора - PullRequest
2 голосов
/ 12 февраля 2010

Я работаю с CMake, и моя программа прекрасно компилируется с g ++. Однако я также хочу скомпилировать его с помощью bcc32 и cl.

Я столкнулся с проблемой - я говорю cmake использовать эти компиляторы, выполнив командную строку, наподобие «cmake -DCMAKE_CXX_COMPILER = cl» или еще много чего, и он правильно подхватывает компилятор (т. Е. В этом случае переменная MSVC установлена ​​в значение true).

Однако, похоже, что он все еще использует аргументы командной строки gnu, что приводит к сбою компилятора в тесте компилятора CXX (т. Е. Он пытается использовать -o для указания и вывода файла для cl вместо / Fe, и вместо -e для bcc32).

Есть ли какой-то правильный способ указать, какой компилятор использовать, или какой-то способ исправить это?

Ответы [ 2 ]

4 голосов
/ 12 февраля 2010

Вы должны использовать параметр -G, который определяет, для какого компилятора должны быть созданы файлы make. Просто запустите cmake --help, чтобы увидеть, какие генераторы доступны. Например, -G "Visual Studio 9 2008" создаст make-файлы для 32-разрядной Visual Studio 2008.

3 голосов
/ 09 апреля 2010

Вы можете использовать любой компилятор, который вы хотите, с генераторами makefile, но он должен быть указан полным путем или доступен в переменной окружения PATH.

Одна вещь, которая может сбить вас с толку, состоит в том, что, как только компилятор указан в дереве сборки CMake, его невозможно изменить. Вы должны сдуть дерево сборки и начать заново, чтобы использовать новый компилятор. Вы не можете просто снова запустить cmake с другим аргументом -DCMAKE_CXX_COMPILER. Начать с нуля ...

Мы запускаем инструментальные панели CMake на некоторых клиентах, используя gmake и cl и генератор "Unix Makefiles". Смотрите скрипт, который настраивает такую ​​сборку здесь:

http://www.cdash.org/CDash/viewNotes.php?buildid=581283

Чтобы увидеть результаты выполнения скрипта, замените «viewNotes» на «buildSummary» в URL-адресе ...

...