Crear un directorio en CMake


En CMake, quiero crear un directorio si aún no existe. ¿Cómo puedo hacer esto?

 102
Author: Jack Kelly, 2010-09-13

3 answers

¿Cuándo desea crear el directorio?

En la generación del sistema de compilación

Para crear un directorio cuando CMake genera el sistema de compilación,

file(MAKE_DIRECTORY ${directory})

En el tiempo de compilación

En el comando add_custom_command() (que agrega una regla de compilación personalizada al sistema de compilación generado) y el comando add_custom_target() (que agrega un destino sin salida para que siempre se compile), especifique los comandos que se ejecutarán en el momento de la compilación. Cree un directorio ejecutando el comando ${CMAKE_COMMAND} -E make_directory. Para ejemplo:

add_custom_target(build-time-make-directory ALL
    COMMAND ${CMAKE_COMMAND} -E make_directory ${directory})

En el momento de la instalación

Para crear un directorio en el momento de la instalación,

install(DIRECTORY DESTINATION ${directory})
 173
Author: Chin Huang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-04 06:26:59

Para crear un directorio en el momento de la instalación,

install(DIRECTORY DESTINATION ${directory})

Estos ambos se ejecutarán en el momento de configuración:

file(MAKE_DIRECTORY ${directory})
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${directory})

Para crear durante la compilación, use un destino personalizado:

add_custom_target(mytargetname ALL COMMAND ${CMAKE_COMMAND} -E make_directory ${directory})
 16
Author: smarquis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-24 19:08:55

Además de la respuesta de Chin Huang, también puedes hacer esto en tiempo de compilación con add_custom_command:

add_custom_command(TARGET ${target_name} PRE_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory ${directory})

También puede cambiar el momento en que su directorio se crea con los parámetros PRE_BUILD | PRE_LINK | POST_BUILD.

 2
Author: Yevhenii Babichenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-13 12:25:02