c++ - studio - Usando CMake con múltiples compiladores para el mismo idioma
visual studio installer (3)
Es imposible hacer esto con CMake.
CMake solo mantiene un conjunto de propiedades del compilador que comparten todos los destinos en un archivo CMakeLists.txt. Si desea utilizar dos compiladores, debe ejecutar CMake dos veces. Esto es válido incluso para, por ejemplo, compilar binarios de 32 bits y 64 bits a partir de la misma cadena de herramientas del compilador.
La forma rápida y sucia de evitar esto es usar comandos personalizados. Pero luego terminas con lo que son básicamente scripts de shell glorificados, que probablemente no es lo que quieres.
La solución limpia es: ¡No los pongas en el mismo CMakeLists.txt! De todos modos, no puede vincular diferentes arquitecturas, por lo que no es necesario que estén en el mismo archivo. Puede reducir las redundancias al refactorizar partes comunes de los scripts de CMake en archivos separados e include()
.
La principal desventaja aquí es que pierde la capacidad de compilar con un solo comando, pero puede resolverlo escribiendo un contenedor en su lenguaje de scripting favorito que se encargue de llamar a los diferentes archivos de CMake-make.
Parece que CMake está bastante arraigado en su opinión de que debería haber uno, y solo uno, CMAKE_CXX_COMPILER para todos los archivos fuente de C ++. No puedo encontrar una manera de anular esto por objetivo. Esto hace que una combinación de compilación de host y cross en un solo CMakeLists.txt sea muy difícil con las funciones CMake incorporadas.
Entonces, mi pregunta es: ¿cuál es la mejor manera de usar varios compiladores para el mismo idioma (es decir, C ++)?
Es posible que desee ver en ExternalProject: http://www.kitware.com/media/html/BuildingExternalProjectsWithCMake2.8.html
Para extender la respuesta de @Bill Hoffman: construya su proyecto como una súper compilación, usando algún tipo de plantilla como la que se encuentra aquí https://github.com/Sarcasm/cmake-superbuild que configurará tanto las dependencias como su proyecto como un ExternalProject (entorno de configuración / construcción / instalación de cmake independiente).