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 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 Jake
Recomiendo 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:
- sin caché, para crear una variable normal
- con caché, para crear una variable en caché
- forzar caché, para forzar siempre el valor de caché al configurar
Veamos qué sucede con las tres posibles llamadas a 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 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é
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
variable 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 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
y ranlib
. 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
.
/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.