visual tutorial studio make cmake

tutorial - cmake: seleccionando un generador dentro de CMakeLists.txt



cmake visual studio 2017 (3)

Me gustaría forzar a CMake a usar el generador "Unix Makefiles" desde CMakeLists.txt.

Este es el comando que uso ahora.

cmake -G "Unix Makefiles" .

Me gustaría que fuera esto.

cmake .

Cuando se ejecuta en Windows con VC instalado y una cadena de herramientas personalizada.

Espero poder configurar el generador en el archivo CMakeLists.txt .

Tal vez algo como esto.

set(CMAKE_GENERATOR "Unix Makefiles")


Esto no es lo que obtengo; cuando ejecuto el mismo comando, cmake buscará una utilidad gcc compiler / make. Si el PATH no está configurado correctamente, fallará con algo como:

D:/Development/build>cmake -G "Unix Makefiles" ../source CMake Error: CMake was unable to find a build program corresponding to "Unix Makefiles". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool. CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly. Missing variable is: CMAKE_C_COMPILER_ENV_VAR CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly. Missing variable is: CMAKE_C_COMPILER CMake Error: Could not find cmake module file:D:/Development/build/CMakeFiles/CMakeCCompiler.cmake CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly. Missing variable is: CMAKE_CXX_COMPILER_ENV_VAR CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly. Missing variable is: CMAKE_CXX_COMPILER CMake Error: Could not find cmake module file:D:/Development/build/CMakeFiles/CMakeCXXCompiler.cmake CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage -- Configuring incomplete, errors occurred!

cuando gcc / mingw está en la ruta, todo funciona bien. Entonces, ¿podría proporcionar más información sobre su variable PATH o la versión CMAKE?


Me parece que la variable CMAKE_GENERATOR se establece demasiado tarde si se establece en el CMakeLists.txt . Si usa (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

Por lo tanto, la variable solo se establece al final del proceso de generación. Si usas algo como

set(CMAKE_GENERATOR "Ninja" CACHE INTERNAL "" FORCE)

en CMakeLists.txt , luego en la primera ejecución de cmake ../source (sin -G ) se usa el generador predeterminado . Sin CMAKE_GENERATOR 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 el caché.

Sin embargo, esta no es la solución más elegante ;-) Quizás utilice un archivo por lotes que realmente ejecute el cmake -G generator para el usuario ...


Esto es lo que funcionó para mí: cree un archivo llamado PreLoad.cmake en el directorio de su proyecto que contiene esto:

set (CMAKE_GENERATOR "Unix Makefiles" CACHE INTERNAL "" FORCE)