Моя ОС - это centos, у которой по умолчанию указан путь к gcc /usr/bin/gcc
. Но он старый, мне нужна новая версия gcc. Поэтому я устанавливаю новую версию по новому пути /usr/local/bin/gcc
.
Но когда я запускаю cmake
, он по-прежнему использует старую версию gcc path ( /usr/bin/gcc
). Как я могу указать gcc на новый путь ( /usr/local/bin/gcc
).
Я попытался переписать /usr/bin/gcc
с /usr/local/bin/gcc
, но она не работает.
/opt
а не в/usr/local
. Желательно/opt/gcc-x.y.z
. Таким образом, если вам понадобится еще более новая версия, у вас не возникнет проблем с удалением предыдущей.Ответы:
Не перезаписывать
CMAKE_C_COMPILER
, а экспортироватьCC
(иCXX
) перед вызовом cmake:Экспорт нужно выполнить только один раз: при первой настройке проекта эти значения будут считаны из кеша CMake.
ОБНОВЛЕНИЕ : более подробное объяснение того, почему не переопределить
CMAKE_C(XX)_COMPILER
после комментария ДжейкаЯ не рекомендую переопределять
CMAKE_C(XX)_COMPILER
значение по двум основным причинам: потому что оно не будет хорошо работать с кешем CMake и потому что оно нарушает проверки компилятора и обнаружение инструментов.При использовании
set
команды у вас есть три варианта:Давайте посмотрим, что произойдет с тремя возможными вызовами
set
:Без кеша
При этом вы создаете «обычную» переменную,
CMAKE_C(XX)_COMPILER
которая скрывает одноименную переменную кэша. Это означает, что ваш компилятор теперь жестко запрограммирован в вашем сценарии сборки, и вы не можете указать ему собственное значение. Это будет проблемой, если у вас несколько сред сборки с разными компиляторами. Вы можете просто обновлять свой скрипт каждый раз, когда хотите использовать другой компилятор, но это в первую очередь лишает смысла использование CMake.Хорошо, тогда давайте обновим кеш ...
С кешем
Эта версия просто «не работает».
CMAKE_C(XX)_COMPILER
Переменная уже в кэше, поэтому он не будет обновляться , если не заставить его.А ... давай применим силу, тогда ...
Принудительный кеш
Это почти то же самое, что и «обычная» версия переменной, с той лишь разницей, что ваше значение будет установлено в кеше, чтобы пользователи могли его видеть. Но любое изменение будет перезаписано
set
командой.Нарушение проверок компилятора и инструментов
В начале процесса настройки CMake выполняет проверку компилятора: работает ли он? Может ли он создавать исполняемые файлы? и т.д. Он также использует компилятор для обнаружения связанных инструментов, таких как
ar
иranlib
. Когда вы переопределяете значение компилятора в скрипте, становится «слишком поздно», все проверки и обнаружения уже выполнены.Например, на моей машине с GCC как компилятор по умолчанию, при использовании
set
команды/usr/bin/clang
,ar
устанавливается в/usr/bin/gcc-ar-7
. При использовании экспорта перед запуском CMake для него установлено значение/usr/lib/llvm-3.8/bin/llvm-ar
.источник
which gcc
> export CXX =which g++
export CC=`which gcc` export CXX=`which g++`
Incorrect 'gcc' version 'compiler.version=5.3' is not the one detected by CMake: 'GNU=4.8'
CMAKE_C_COMPILER
хорошо работает при условии , вы делаете это с помощью командной строки:$ cmake -GNinja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ /path/to/source
.Это довольно старый вопрос, но он все еще появляется в поиске Google. Принятый вопрос больше не работал у меня и, похоже, устарел. Самая последняя информация о cmake написана в FAQ по cmake .
Есть разные способы изменить путь к вашему компилятору. Один из способов был бы
вместо этого
gcc-4.2
вы можете написать вотpath/to/your/compiler
такисточник
Установите
CMAKE_C_COMPILER
свой новый путь.Смотрите здесь: http://www.cmake.org/Wiki/CMake_Useful_Variables
источник
Экспорт должен указывать, какую версию GCC / G ++ использовать, потому что, если бы у пользователя было несколько версий компилятора, она не могла бы успешно компилироваться.
Если в проекте используется C ++ 11, это можно сделать с помощью
-std=C++-11
флага в CMakeList.txt.источник
Альтернативным решением является настройка вашего проекта с помощью cmake-gui, начиная с чистого каталога сборки. Среди вариантов, доступных в начале, есть возможность выбрать точный путь к компиляторам.
источник
Это не только работает с
cmake
, но и с./configure
иmake
:В результате:
источник
Изменить
CMAKE_<LANG>_COMPILER
путь без запуска перенастройкиЯ хотел скомпилировать с помощью альтернативного компилятора, но также передать параметры -D в командной строке, которые будут уничтожены, если установить другой компилятор. Это происходит потому, что запускается повторная настройка. Хитрость заключается в том, чтобы отключить обнаружение компилятора с
NONE
помощьюFORCE
, затем установить пути с помощьюenable_language
.Используйте файл Toolchain
Более разумный выбор - создать файл инструментальной цепочки.
Затем вы вызываете Cmake с дополнительным флагом
источник