Как указать новый путь GCC для CMake
моя ОС centos, которая имеет gcc по умолчанию в пути /usr/bin/gcc
. Но он старый, мне нужна новая версия GCC. Поэтому я устанавливаю новую версию в новом пути /usr/local/bin/gcc
.
но когда я запускаю cmake
, он по-прежнему использует старый путь gcc версии(/usr/bin/gcc
). Как я могу указать gcc на новый путь (/usr/local/bin/gcc
).
Я пробовал заменить /usr/bin/gcc
с /usr/local/bin/gcc
, но он не работает.
5 ответов:
не затирать
CMAKE_C_COMPILER
, но экспортCC
(иCXX
) перед вызовом cmake:export CC=/usr/local/bin/gcc export CXX=/usr/local/bin/g++ cmake /path/to/your/project make
экспорт должен быть выполнен только один раз, при первой настройке проекта, тогда эти значения будут считаны из кэша CMake.
обновление: более длинное объяснение, почему не переопределение
CMAKE_C(XX)_COMPILER
после комментарияя рекомендую не переопределять
CMAKE_C(XX)_COMPILER
значение по двум основным причинам: потому что он не будет играть хорошо с кэшем CMake и потому, что он нарушает проверки компилятора и обнаружение инструментов.при использовании , у вас есть три варианта:
- без кэша, чтобы создать нормальную переменную
- С помощью кэша, чтобы создать кэшированную переменную
- force cache, чтобы всегда форсировать значение кэша при настройке
давайте посмотрим, что происходит для трех возможных вызовов
set
:без кэша
set(CMAKE_C_COMPILER /usr/bin/clang) set(CMAKE_CXX_COMPILER /usr/bin/clang++)
при этом вы создаете" нормальную " переменную
CMAKE_C(XX)_COMPILER
что скрывает переменную кэша с тем же именем. Это означает, что ваш компилятор теперь жестко закодирован в вашем скрипте сборки, и вы не можете дать ему пользовательское значение. Это будет проблемой, если у вас есть несколько сред сборки с разными компиляторами. Вы можете просто обновлять свой скрипт каждый раз, когда вы хотите использовать другой компилятор, но это удаляет значение используя CMake в первую очередь.Хорошо, тогда давайте обновим кэш...
с кешем
set(CMAKE_C_COMPILER /usr/bin/clang CACHE PATH "") set(CMAKE_CXX_COMPILER /usr/bin/clang++ CACHE PATH "")
эта версия просто"не работает". Элемент
CMAKE_C(XX)_COMPILER
переменная уже находится в кэше, поэтому она не будет обновляться, если вы не заставите ее.Ах... тогда давай применим силу...
Force cache
set(CMAKE_C_COMPILER /usr/bin/clang CACHE PATH "" FORCE) set(CMAKE_CXX_COMPILER /usr/bin/clang++ CACHE PATH "" FORCE)
это почти то же самое, что и" нормальная " переменная версия, единственная разница в том, что ваше значение будет установлено в кэше, чтобы пользователи могли его видеть. Но любое изменение будет перезаписано .
нарушение проверки компилятора и оснастки
в начале процесса настройки CMake выполняет проверку компилятора: работает ли он? Может ли он производить исполняемые файлы? так далее. Он также использует компилятор для обнаружения связанных инструментов, таких как
ar
иranlib
. Когда вы переопределяете значение компилятора в скрипте ,это " слишком поздно", все проверки и обнаружения уже сделаны.например, на моей машине с GCC в качестве компилятора по умолчанию, при использовании до
/usr/bin/clang
,ar
установлено значение/usr/bin/gcc-ar-7
. При использовании экспорта перед запуском CMake он устанавливается в/usr/lib/llvm-3.8/bin/llvm-ar
.
Set
CMAKE_C_COMPILER
к вашему новому пути.смотрите здесь:http://www.cmake.org/Wiki/CMake_Useful_Variables
этот вопрос довольно старый, но все еще появляется в поиске Google. Принятый вопрос больше не работал для меня и, кажется, постарел. Последняя информация о cmake записана в CMake, например, справку.
там вы можете найти различные способы изменить путь вашего компилятора. Один из способов будет
установить соответствующие
CMAKE_FOO_COMPILER
переменная(ы) для допустимого компилятора имя или полный путь в командной строке с помощьюcmake -D
. Для пример:cmake -G "Your Generator" -D CMAKE_C_COMPILER=gcc-4.2 -D CMAKE_CXX_COMPILER=g++-4.2 path/to/your/source
вместо
gcc-4.2
вы можете написать путь/к / ваш / компилятор, как этоcmake -D CMAKE_C_COMPILER=/path/to/gcc/bin/gcc -D CMAKE_CXX_COMPILER=/path/to/gcc/bin/g++ .
экспорт должен быть конкретным о том, какую версию GCC / G++ использовать, потому что если пользователь имел несколько версий компилятора, он не будет успешно компилироваться.
export CC=path_of_gcc/gcc-version export CXX=path_of_g++/g++-version cmake path_of_project_contain_CMakeList.txt make
в случае использования проекта C++11 это может быть обработано с помощью
-std=C++-11
флаг в CMakeList.txt