Mi sistema operativo es centos, que tiene un gcc predeterminado en la ruta /usr/bin/gcc
. Pero es viejo, necesito una nueva versión de gcc. Entonces instalo una nueva versión en una nueva ruta /usr/local/bin/gcc
.
Pero cuando ejecuto cmake
, todavía usa la ruta gcc de la versión anterior ( /usr/bin/gcc
). ¿Cómo puedo especificar el gcc a la nueva ruta ( /usr/local/bin/gcc
)?
He intentado sobrescribir /usr/bin/gcc
con /usr/local/bin/gcc
, pero no funciona.
/opt
lugar de/usr/local
. Preferiblemente/opt/gcc-x.y.z
. De esta manera, si necesita una versión aún más nueva, no tendrá problemas para desinstalar la anterior.Respuestas:
No sobrescriba
CMAKE_C_COMPILER
, pero exporteCC
(yCXX
) antes de llamar a cmake:La exportación solo debe realizarse una vez, la primera vez que configure el proyecto, luego esos valores se leerán de la caché de CMake.
ACTUALIZACIÓN : explicación más larga sobre por qué no anular
CMAKE_C(XX)_COMPILER
después del comentario de JakeRecomiendo no anular el
CMAKE_C(XX)_COMPILER
valor por dos razones principales: porque no funcionará bien con la caché de CMake y porque rompe las comprobaciones del compilador y la detección de herramientas.Al usar el
set
comando, tiene tres opciones:Veamos qué sucede con las tres posibles llamadas a
set
:Sin caché
Al hacer esto, crea una variable "normal"
CMAKE_C(XX)_COMPILER
que oculta la variable de caché del mismo nombre. Eso significa que su compilador ahora está codificado en su script de compilación y no puede darle un valor personalizado. Esto será un problema si tiene varios entornos de compilación con diferentes compiladores. Puede actualizar su script cada vez que desee usar un compilador diferente, pero eso elimina el valor de usar CMake en primer lugar.Ok, entonces, actualice el caché ...
Con caché
Esta versión simplemente "no funcionará". La
CMAKE_C(XX)_COMPILER
variable ya está en la caché, por lo que no se actualizará a menos que la fuerce.Ah ... usemos la fuerza, entonces ...
Forzar caché
Esto es casi lo mismo que la versión variable "normal", la única diferencia es que su valor se establecerá en la caché, para que los usuarios puedan verlo. Pero cualquier cambio será sobrescrito por el
set
comando.Rompiendo comprobaciones y herramientas del compilador
Al principio del proceso de configuración, CMake realiza comprobaciones en el compilador: ¿Funciona? ¿Es capaz de producir ejecutables? etc. También usa el compilador para detectar herramientas relacionadas, como
ar
yranlib
. Cuando anula el valor del compilador en un script, es "demasiado tarde", todas las comprobaciones y detecciones ya están hechas.Por ejemplo, en mi máquina con gcc como compilador predeterminado, cuando uso el
set
comando to/usr/bin/clang
,ar
se establece en/usr/bin/gcc-ar-7
. Cuando se utiliza una exportación antes de ejecutar CMake, se establece en/usr/lib/llvm-3.8/bin/llvm-ar
.fuente
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
funciona bien siempre lo hace utilizando la línea de comandos:$ cmake -GNinja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ /path/to/source
.Esta pregunta es bastante antigua, pero todavía aparece en la Búsqueda de Google. La pregunta aceptada ya no me funcionaba y parece estar envejecida. La información más reciente sobre cmake está escrita en las preguntas frecuentes de cmake .
Hay varias formas de cambiar la ruta de su compilador. Una forma seria
en lugar de
gcc-4.2
que puedas escribirpath/to/your/compiler
asífuente
Establezca
CMAKE_C_COMPILER
su nuevo camino.Vea aquí: http://www.cmake.org/Wiki/CMake_Useful_Variables
fuente
La exportación debe ser específica sobre qué versión de GCC / G ++ usar, porque si el usuario tuviera varias versiones del compilador, no se compilaría correctamente.
En caso de que el proyecto use C ++ 11, esto se puede manejar usando la
-std=C++-11
bandera en CMakeList.txtfuente
Una solución alternativa es configurar su proyecto a través de cmake-gui, comenzando desde un directorio de construcción limpio. Entre las opciones que tienes disponibles al principio, existe la posibilidad de elegir la ruta exacta a los compiladores
fuente
Esto no solo funciona con
cmake
, sino también con./configure
ymake
:Lo que resulta en:
fuente
Cambiar de
CMAKE_<LANG>_COMPILER
ruta sin desencadenar una reconfiguraciónQuería compilar con un compilador alternativo, pero también pasar las opciones -D en la línea de comandos que se borrarían al configurar un compilador diferente. Esto sucede porque desencadena una reconfiguración. El truco consiste en desactivar la detección del compilador con
NONE
, establecer las rutas conFORCE
, luegoenable_language
.Utilice un archivo de cadena de herramientas
La opción más sensata es crear un archivo de cadena de herramientas.
Luego invocas Cmake con una bandera adicional
fuente