Saltar al contenido

¿Cómo modificar las variables de entorno pasadas al objetivo CMake personalizado?

Solución:

Una forma portátil de configurar variables de entorno para un objetivo personalizado es usar el comando de modo de herramienta de línea de comandos de CMake env:

env [--unset=NAME]... [NAME=VALUE]... COMMAND [ARG]...

Ejecute el comando en un entorno modificado.

P.ej:

add_custom_target(newtarget ${CMAKE_COMMAND} -E env NAME=VALUE somecommand)

Consulte también Modo de herramienta de línea de comandos.

Establece la variable de entorno en configuración paso, pero comando especificado para add_custom_target se ejecuta en construir paso. Consulte también Preguntas frecuentes de CMake: ¿Cómo puedo obtener o establecer variables de entorno?

[…]

Variables de entorno SET en CMakeLists.txt solamente
tener efecto para cmake sí mismotiempo de configuración), por lo que no puede utilizar este método para establecer una variable de entorno que un comando personalizado pueda necesitar (Tiempo de construcción). Salvo el soporte de variables de entorno mediante varios comandos de CMake (p. Ej. add_custom_command(), actualmente no admitido todavía), una solución alternativa aceptable puede ser invocar scripts de shell en su lugar, que envuelvan los comandos que se ejecutarán.

En la actualidad add_custom_target (y otros comandos, que definen acciones para el paso de construcción, p. ej. add_custom_command) no admite variables de entorno de configuración simple. Como se aconseja en este informe de error, para establecer el valor de la variable sin espacios en Linux puede anteponer el comando con cláusulas “VAR = VAL”. Para casos generales puede prepararse envoltura script, que configura el entorno y ejecuta el comando real:

En Windows:

envoltorio murciélago:

@ECHO OFF
set PATH=C:\Some\Path;%PATH%
%*

CMakeLists.txt:

add_custom_target(...
    COMMAND cmd /c ${CMAKE_CURRENT_SOURCE_DIR}/wrapper.bat <real_command> args...
)

En Linux:

wrapper.sh:

export "PATH=/Some/Path:$PATH"
eval "$*"

CMakeLists.txt:

add_custom_target(...
    COMMAND /bin/sh ${CMAKE_CURRENT_SOURCE_DIR}/wrapper.sh <real_command> args...
)

Si el valor de la variable depende de la configuración, puede configurar el script de envoltura con configure_file.

ACTUALIZAR:

Como señaló @sakra, env modo de herramienta de cmake El ejecutable se puede utilizar como un script contenedor:

add_custom_target(...
    COMMAND ${CMAKE_COMMAND} -E env "PATH=C:/Some/Path;$ENV{PATH}" <real_command> args...
)

Esta forma está disponible desde CMake 3.2.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *