Meu sistema operacional é centos que possui um gcc padrão no caminho /usr/bin/gcc
. Mas é antigo, preciso de uma nova versão do gcc. Então, instalo uma nova versão em um novo caminho /usr/local/bin/gcc
.
Mas quando eu corro cmake
, ele ainda usa a versão antiga path gcc ( /usr/bin/gcc
). Como posso especificar o gcc para o novo caminho ( /usr/local/bin/gcc
).
Eu tentei substituir /usr/bin/gcc
com /usr/local/bin/gcc
, mas não funciona.
/opt
vez de/usr/local
. De preferência/opt/gcc-x.y.z
. Dessa forma, se você precisar de uma versão ainda mais nova, não terá problemas para desinstalar a anterior.Respostas:
Não substitua
CMAKE_C_COMPILER
, mas exporteCC
(eCXX
) antes de chamar o cmake:A exportação precisa ser feita apenas uma vez, na primeira vez em que você configurar o projeto, esses valores serão lidos no cache do CMake.
UPDATE : explicação mais longa sobre por que não substituir
CMAKE_C(XX)_COMPILER
após o comentário de JakeEu recomendo não substituir o
CMAKE_C(XX)_COMPILER
valor por dois motivos principais: porque ele não funciona bem com o cache do CMake e porque quebra as verificações do compilador e a detecção de ferramentas.Ao usar o
set
comando, você tem três opções:Vamos ver o que acontece nas três chamadas possíveis para
set
:Sem cache
Ao fazer isso, você cria uma variável "normal"
CMAKE_C(XX)_COMPILER
que oculta a variável de cache com o mesmo nome. Isso significa que seu compilador agora está codificado no script de construção e você não pode atribuir um valor personalizado a ele. Isso será um problema se você tiver vários ambientes de compilação com diferentes compiladores. Você pode simplesmente atualizar seu script sempre que quiser usar um compilador diferente, mas isso remove o valor do uso do CMake em primeiro lugar.Ok, então, vamos atualizar o cache ...
Com cache
Esta versão simplesmente "não funciona". A
CMAKE_C(XX)_COMPILER
variável já está no cache, portanto, não será atualizada a menos que você a force.Ah ... vamos usar a força, então ...
Forçar cache
É quase o mesmo que a versão variável "normal", a única diferença é que seu valor será definido no cache, para que os usuários possam vê-lo. Mas qualquer alteração será substituída pelo
set
comando.Quebrando verificações e ferramentas do compilador
No início do processo de configuração, o CMake realiza verificações no compilador: Funciona? É capaz de produzir executáveis? etc. Ele também usa o compilador para detectar ferramentas relacionadas, como
ar
eranlib
. Quando você substitui o valor do compilador em um script, é "tarde demais", todas as verificações e detecções já estão concluídas.Por exemplo, na minha máquina com gcc como compilador padrão, ao usar o
set
comando para/usr/bin/clang
,ar
está definido para/usr/bin/gcc-ar-7
. Ao usar uma exportação antes de executar o CMake, ela está definida como/usr/lib/llvm-3.8/bin/llvm-ar
.fonte
which gcc
> CXX exportação =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
funciona bem desde que você fazê-lo usando a linha de comando:$ cmake -GNinja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ /path/to/source
.Esta pergunta é bastante antiga, mas ainda aparece na Pesquisa do Google. A pergunta aceita não estava mais funcionando para mim e parece estar envelhecida. As informações mais recentes sobre o cmake estão escritas nas Perguntas frequentes do cmake .
Existem várias maneiras de alterar o caminho do seu compilador. Uma maneira seria
em vez de
gcc-4.2
você pode escreverpath/to/your/compiler
assimfonte
Defina
CMAKE_C_COMPILER
para o seu novo caminho.Veja aqui: http://www.cmake.org/Wiki/CMake_Useful_Variables
fonte
A exportação deve ser específica sobre qual versão do GCC / G ++ usar, porque se o usuário tiver várias versões do compilador, ele não será compilado com êxito.
Caso o projeto use C ++ 11, isso pode ser tratado usando o
-std=C++-11
sinalizador em CMakeList.txtfonte
Uma solução alternativa é configurar seu projeto através do cmake-gui, iniciando em um diretório de construção limpo. Entre as opções disponíveis no início, existe a possibilidade de escolher o caminho exato para os compiladores
fonte
Isso não funciona apenas com
cmake
, mas também com./configure
emake
:O que está resultando em:
fonte
Alterar
CMAKE_<LANG>_COMPILER
caminho sem acionar uma reconfiguraçãoEu queria compilar com um compilador alternativo, mas também passar as opções -D na linha de comando, que seriam eliminadas pela configuração de um compilador diferente. Isso acontece porque dispara uma reconfiguração. O truque é desativar a detecção do compilador com
NONE
, definir os caminhos comFORCE
, entãoenable_language
.Use um arquivo Toolchain
A escolha mais sensata é criar um arquivo de cadeia de ferramentas.
Então você invoca o Cmake com um sinalizador adicional
fonte