file_exists existe comprobar archivo file cmake file-exists

file - existe - Verifique que exista un archivo local



comprobar si existe un archivo c++ (3)

En mi script CMake quiero ver si tengo un archivo en mi sistema, y ​​si está allí, haga algo con él, de lo contrario haga algo con un archivo predeterminado. Aquí está el código:

find_file( ${project_name}_${customer}_config ${ROOT}/configuration/${customer}/configuration.${project_name}.xml ) if(NOT ${${project_name}_${customer}_config} STREQUAL ${project_name}_${customer}_config-NOTFOUND ) configure_file(${ROOT}/configuration/${customer}/configuration.${project_name}.xml ${CMAKE_CURRENT_BINARY_DIR}/conf/configuration.xml) else() configure_file(${FAPP_ROOT}/configuration/Default/configuration.${project_name}.xml ${CMAKE_CURRENT_BINARY_DIR}/conf/configuration.xml) endif()

Pero parece que esto no está funcionando.

¿Cuál es la forma correcta de verificar si existe un archivo en CMake?


Creo que el if (EXISTS <path>) es una buena solución. Me gustaría compartir un escenario que encontré recientemente, aunque en la mayoría de los casos es probable que no le importe este escenario.

Tenga en cuenta que esta solución no devolverá verdadero si el usuario efectivo no puede acceder al archivo. El archivo existe, pero simplemente no es legible.

Una solución para este escenario si le importa si el archivo realmente existe o no, es llamar a execute_process(COMMAND ls /dev/fb0 RESULT_VARIABLE result OUTPUT_QUIET ERROR_QUIET) y luego verifique el result esta manera

if (result) message("/dev/fb0 doesn''t exist.") endif()

edit : agregue ERROR_QUIET en execute_process o recibirá mensajes de error de ls cuando el archivo no exista.


Debes ser capaz de usar

if(NOT ${project_name}_${customer}_config)

De la docs :

if(<constant>)

Verdadero si la constante es 1, ON, YES, TRUE, Y, o un número distinto de cero. Falso si la constante es 0, APAGADO, NO, FALSO, N, IGNORAR, "", o termina en el sufijo ''-NOTFOUND''.

Sin embargo, si el archivo se encuentra utilizando find_file , el valor se almacena en caché y las ejecuciones posteriores de CMake no intentarán encontrarlo nuevamente. Para forzar una find_file en cada ejecución, antes de la llamada find_file haga:

unset(${project_name}_${customer}_config CACHE)


La forma correcta de verificar si existe un archivo, si ya conoce el nombre completo de la ruta al archivo es simplemente:

if(EXISTS "${ROOT}/configuration/${customer}/configuration.${project_name}.xml") ... else() ... endif()