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)_COMPILERdespués del comentario de Jake
Recomiendo no anular el CMAKE_C(XX)_COMPILERvalor 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 setcomando, 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)_COMPILERque 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)_COMPILERvariable 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 setcomando.
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 ary 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 setcomando to /usr/bin/clang, arse 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.
/optlugar 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.