Как указать новый путь 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 65

5 ответов:

не затирать CMAKE_C_COMPILER, но экспорт CCCXX) перед вызовом 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

альтернативным решением является настройка вашего проекта через cmake-gui, начиная с чистого каталога сборки. Среди опций, доступных в начале, есть возможность выбрать точный путь к компиляторам