Me parece que la variable CMAKE_GENERATOR
se establece demasiado tarde si se establece en el CMakeLists.txt
. Si utiliza (incluso al principio de CMakeLists.txt
)
set(CMAKE_GENERATOR "Ninja")
message("generator is set to ${CMAKE_GENERATOR}")
se puede ver en la salida algo así como
% cmake ../source
-- The C compiler identification is GNU 4.9.2
...
-- Detecting CXX compile features - done
generator is set to Ninja
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/build
Así que la variable sólo se fija en el final del procedimiento de generación. Si utiliza algo así como
set(CMAKE_GENERATOR "Ninja" CACHE INTERNAL "" FORCE)
en CMakeLists.txt
, a continuación, en la primera carrera de cmake ../source
(sin -G
) se utiliza el generador dedefecto. Sin embargo, la variable CMAKE_GENERATOR
se almacena en el caché. Por lo tanto, si vuelve a ejecutar cmake ../source
después, usará el generador como se especifica en la variable CMAKE_GENERATOR
en la caché.
Esto seguramente no es la solución más elegante, aunque ;-) Tal vez utilizar un archivo por lotes que realmente va a ejecutar la cmake -G generator
para el usuario ...
porque estoy utilizando una herramienta de cadena personalizada, y tengo VC++ instalado, no puede depender de CMake la selección de un generador. Tampoco sé qué especificar en la línea de comandos para que sea fácil para el usuario clonar y construir el proyecto. – Ted
Ok ... lo siento, no entendí bien su pregunta.En ese caso, recomendaría colocar un CMakeCache.txt en el directorio, que en su mayoría está vacío, pero para la variable CMAKE_GENERATOR. O podría tener ese archivo de caché en su repositorio de origen y pasarlo junto con la opción -C cmake. – Frank