proyecto - Cómo establecer la variable de entorno de ruta usando CMake y Visual Studio para ejecutar la prueba
compilar proyecto c# linea comandos (4)
Acabo de descubrir esta pregunta ahora. Para depurar archivos cmake que uso
MESSAGE( STATUS "static text ${variable}" )
Nunca tuve que configurar el camino para que se ejecutaran mis pruebas. ¿Estás usando CTest? Parece que el enlace que está siguiendo se usa con ctest.
Si estuviera tratando de hacer que esto funcione, usaría set_tests_properties
explícitamente primero.
set_tests_properties(SomeTest PROPERTIES ENVIRONMENT "PATH=c:/somedir;c:/otherdir")
Entonces hazlo más general.
Estoy usando CMake para generar archivos de proyecto de Visual Studio. Quiero ejecutar el ejecutable de prueba después de configurar la variable de entorno PATH para que pueda cargar el dll requerido. Intenté según la discusión en http://www.mail-archive.com/[email protected]/msg21493.html pero no funciona.
¿Has usado CMake con Visual Studio para este propósito? Por favor comparta sus experiencias.
Además, no encuentro una manera fácil de depurar mi script CMake, por ejemplo, para ver qué valor le asigna a la variable PATH. Establecer CMake verbose con CMAKE_VERBOSE_MAKEFILE
no ayuda. ¿Cómo voy a depurarlo yo mismo?
Aquí está relacionado el informe de solicitud de función de CMake:
http://www.kwwidgets.org/Bug/view.php?id=8884
ACTUALIZACIÓN: se resolvió según la configuración del conjunto de "variables de entorno personalizadas" del proyecto Visual Studio con CMake , gracias a Florian por el comentario a continuación.
Para establecer una configuración de proyecto personalizada en Visual Studio desde CMake, puede usar un archivo XML como una plantilla que se puede configurar desde CMake para que funcione como el archivo .user
.
En mi trabajo, utilizamos esto para establecer parámetros de depuración personalizados.
Compruebe el directorio que contiene los archivos .vcproj
generados para la configuración del usuario en los archivos .user
. Aquí hay un fragmento de un archivo UserTemplate.vcproj
ejemplo que usamos.
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="9.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|@USERFILE_PLATFORM@"
>
<DebugSettings
Command="@USERFILE_COMMAND_DEBUG@"
WorkingDirectory="@USERFILE_WORKING_DIRECTORY_DEBUG@"
CommandArguments="@USERFILE_COMMAND_ARGUMENTS_DEBUG@"
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="@USERFILE_REMOTE_MACHINE_DEBUG@"
<!-- More settings removed for snippet -->
/>
</Configuration>
<!-- Rest of Configurations -->
De esta forma, puede inyectar las variables necesarias de CMake en el archivo .user
. En CMake puede establecer las variables de CMake apropiadas (y agregar más en el archivo de plantilla si las necesita). A continuación, puede hacer algo como esto para configurar el archivo.
# Find user and system name
SET(SYSTEM_NAME $ENV{USERDOMAIN} CACHE STRING SystemName)
SET(USER_NAME $ENV{USERNAME} CACHE STRING UserName)
# Configure the template file
SET(USER_FILE ${_projectName}.vcproj.${SYSTEM_NAME}.${USER_NAME}.user)
SET(OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/${USER_FILE})
CONFIGURE_FILE(UserTemplate.user ${USER_FILE} @ONLY)
Puede dar cualquier opción de forma global con la nueva propiedad de destino VS_USER_PROPS
(versión> = 3.8).
Aquí hay un ejemplo de trabajo:
CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(SetEnvPathTest)
file(WRITE main.cpp [=[
// http://en.cppreference.com/w/cpp/utility/program/getenv
#include <iostream>
#include <cstdlib>
int main()
{
if(const char* env_p = std::getenv("PATH"))
std::cout << "Your PATH is: " << env_p << ''/n'';
}
]=])
add_executable(${PROJECT_NAME} main.cpp)
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.Cpp.user.props" [=[
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="''$(Configuration)|$(Platform)''==''Debug|Win32''">
<LocalDebuggerEnvironment>PATH=C:/Test</LocalDebuggerEnvironment>
</PropertyGroup>
<PropertyGroup Condition="''$(Configuration)|$(Platform)''==''Release|Win32''">
<LocalDebuggerEnvironment>PATH=C:/Test</LocalDebuggerEnvironment>
</PropertyGroup>
</Project>
]=])
set_target_properties(
${PROJECT_NAME}
PROPERTIES
VS_USER_PROPS "${PROJECT_NAME}.Cpp.user.props"
)