Cómo especificar una nueva ruta GCC para CMake

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 versión anterior gcc path ( /usr/bin/gcc ). ¿Cómo puedo especificar gcc a la nueva ruta ( /usr/local/bin/gcc ).

Intenté sobreescribir /usr/bin/gcc con /usr/local/bin/gcc , pero no funcionó.

No sobrescriba CMAKE_C_COMPILER , pero exporte CC (y CXX ) antes de llamar a cmake:

 export CC=/usr/local/bin/gcc export CXX=/usr/local/bin/g++ cmake /path/to/your/project make 

La exportación solo debe hacerse una vez, la primera vez que configure el proyecto, luego esos valores se leerán en la memoria caché de CMake.


ACTUALIZACIÓN : explicación más larga sobre por qué no reemplaza CMAKE_C(XX)_COMPILER después del comentario de Jake

Recomiendo anular el valor CMAKE_C(XX)_COMPILER por dos razones principales: porque no funcionará bien con la memoria caché de CMake y porque rompe las comprobaciones del comstackdor y la detección de herramientas.

Cuando usa el comando set , tiene tres opciones:

  • sin caché, para crear una variable normal
  • con caché, para crear una variable en caché
  • forzar caché, forzar siempre el valor de caché al configurar

Veamos qué ocurre con las tres posibles llamadas para set :

Sin caché

 set(CMAKE_C_COMPILER /usr/bin/clang) set(CMAKE_CXX_COMPILER /usr/bin/clang++) 

Al hacer esto, crea una variable “normal” CMAKE_C(XX)_COMPILER que oculta la variable de caché del mismo nombre. Eso significa que su comstackdor ahora está codificado en su script de comstackción y no puede darle un valor personalizado. Esto será un problema si tiene múltiples entornos de comstackción con comstackdores diferentes. Puedes actualizar tu script cada vez que quieras usar un comstackdor diferente, pero eso elimina el valor de usar CMake en primer lugar.

Ok, entonces, actualicemos el caché …

Con caché

 set(CMAKE_C_COMPILER /usr/bin/clang CACHE PATH "") set(CMAKE_CXX_COMPILER /usr/bin/clang++ CACHE PATH "") 

Esta versión simplemente “no funcionará”. La CMAKE_C(XX)_COMPILER ya está en la caché, por lo que no se actualizará a menos que la fuerce.

Ah … usemos la fuerza, entonces …

Forzar caché

 set(CMAKE_C_COMPILER /usr/bin/clang CACHE PATH "" FORCE) set(CMAKE_CXX_COMPILER /usr/bin/clang++ CACHE PATH "" FORCE) 

Esto es casi lo mismo que la versión variable “normal”, la única diferencia es que su valor se establecerá en la memoria caché, para que los usuarios puedan verla. Pero cualquier cambio será sobrescrito por el comando set .

Rompiendo verificaciones y herramientas del comstackdor

Al principio del proceso de configuración, CMake realiza comprobaciones en el comstackdor: ¿Funciona? ¿Es capaz de producir ejecutables? etc. También usa el comstackdor para detectar herramientas relacionadas, como ar y ranlib . Cuando anula el valor del comstackdor en una secuencia de comandos, es “demasiado tarde”, todas las comprobaciones y detecciones ya están hechas.

Por ejemplo, en mi máquina con gcc como comstackdor predeterminado, cuando se utiliza el comando set en /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 .

Establezca CMAKE_C_COMPILER en su nueva ruta.

Vea aquí: http://www.cmake.org/Wiki/CMake_Useful_Variables

Esta pregunta es bastante antigua, pero aún aparece en la Búsqueda de Google. La pregunta aceptada ya no me funcionaba y parece envejecer. La última información sobre cmake está escrita en las preguntas frecuentes de cmake .

Allí puede encontrar varias formas de cambiar la ruta de su comstackdor. Una forma sería

Establezca la (s) variable (s) CMAKE_FOO_COMPILER apropiadas en un nombre de comstackdor válido o una ruta completa en la línea de comando usando cmake -D . Por ejemplo:

 cmake -G "Your Generator" -D CMAKE_C_COMPILER=gcc-4.2 -D CMAKE_CXX_COMPILER=g++-4.2 path/to/your/source 

en lugar de gcc-4.2 puedes escribir la ruta / a / tu / comstackdor como este

  cmake -D CMAKE_C_COMPILER=/path/to/gcc/bin/gcc -D CMAKE_CXX_COMPILER=/path/to/gcc/bin/g++ . 

La exportación debe ser específica sobre qué versión de GCC / G ++ usar, ya que si el usuario tiene una versión de comstackción múltiple, no se comstackrá correctamente.

  export CC=path_of_gcc/gcc-version export CXX=path_of_g++/g++-version cmake path_of_project_contain_CMakeList.txt make 

En caso de que el proyecto use C ++ 11, esto se puede manejar utilizando el -std=C++-11 en CMakeList.txt

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 comstackdores