es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

CMake: ejecutar el objetivo Debug o Release en el momento de la instalación.

En mi proyecto de CMake genero un objetivo “MyProgram” con:

ADD_EXECUTABLE(MyProgram ...)

Luego, en el momento de la instalación, me gustaría ejecutar este programa (con algunos argumentos), así que uso:

INSTALL(SCRIPT MyScript.cmake)

Pero con Windows + MSVC, no puedo encontrar una forma de llamar al ejecutable correcto:
– En el modo Debug quiero llamar a ${EXECUTABLE_OUTPUT_PATH}/Debug/MyProgram.exe
– En el modo Release quiero llamar a ${EXECUTABLE_OUTPUT_PATH}/Release/MyProgram.exe

Sé un poco sobre expresiones generadoras de CMake, pero no pude hacer que funcionara con install(SCRIPT).

¡Cualquier ayuda sería muy apreciada!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para llamar al ejecutable adecuado en Windows + MSVC utilizando install(SCRIPT), puedes utilizar la variable CMAKE_BUILD_TYPE para comprobar si estás en modo Debug o Release. Aquí tienes un ejemplo de archivo MyScript.cmake que podrías utilizar:

    if(CMAKE_BUILD_TYPE STREQUAL "Debug")
        set(MYPROGRAM_EXECUTABLE "${EXECUTABLE_OUTPUT_PATH}/Debug/MyProgram.exe")
    else()
        set(MYPROGRAM_EXECUTABLE "${EXECUTABLE_OUTPUT_PATH}/Release/MyProgram.exe")
    endif()
    
    execute_process(COMMAND ${MYPROGRAM_EXECUTABLE} arg1 arg2)
    

    Este script comprueba si el tipo de construcción es Debug o Release, y establece la ruta al ejecutable correcto en consecuencia. Después, llama a execute_process para ejecutar el ejecutable con algunos argumentos.

    También podrías utilizar una expresión generadora para especificar la ruta del ejecutable directamente en el comando INSTALL(SCRIPT). Aquí tienes un ejemplo:

    INSTALL(SCRIPT MyScript.cmake DESTINATION bin)
    

    En MyScript.cmake, podrías utilizar la expresión generadora $<config> para obtener la configuración de construcción actual (Debug o Release), de esta forma:

    execute_process(
        COMMAND ${CMAKE_COMMAND} -E env
            "${EXECUTABLE_OUTPUT_PATH}/$<config>/MyProgram.exe" arg1 arg2
    )
    

    Esto ejecuta el programa con argumentos arg1 y arg2, utilizando el comando ${CMAKE_COMMAND} -E env para establecer la ruta del ejecutable correctamente para la configuración de construcción actual. Ten en cuenta que este enfoque podría ser menos flexible que el anterior, ya que asume que el ejecutable siempre estará ubicado en un subdirectorio de EXECUTABLE_OUTPUT_PATH.

Comments are closed.