Cómo establecer $ (OutDir), $ (TargetName), $ (TargetExt) y% (Lib.OutputFile) con Visual Studio?

StackOverflow https://stackoverflow.com/questions/4650993

Pregunta

Estoy tratando de construir GTEST en Visual Studio 2010. Después de convertir el archivo de solución , traté de acumulación, y me dieron los siguientes mensajes de advertencia.

Warning 1   warning MSB8012: 
TargetPath(C:\Users\sucho\Desktop\gtest-1.5.0\msvc\gtest/Debug\gtest.lib) does not match
the Library's OutputFile property value (C:\Users\sucho\Desktop\gtest-1.5.0\msvc\gtest\
Debug\gtestd.lib).

This may cause your project to build incorrectly. 
To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property
values match the value specified in %(Lib.OutputFile).  
C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets

El mensaje dice que necesito las variables de configuración $(OutDir), $(TargetName) y $(TargetExt), junto con los valores de las propiedades especificadas en %(Lib.OutputFile).

¿Cómo puedo hacer eso con Visual Studio (especialmente VS 2010)?

¿Fue útil?

Solución

La advertencia es espuria - suponiendo que utilizas Google prueba, funciona muy bien

Puede hacer que se vaya sin embargo. Haz clic derecho en el proyecto infractor y seleccione propiedades. Seleccione "bibliotecario" en la vista de árbol en el lado izquierdo, y cambiar el tema "Archivo de salida" a la derecha haciendo clic en la casilla junto al archivo de salida, y seleccionando la opción "Heredar del padre o del proyecto por defecto".

Otros consejos

Lo veo. Haga clic en el proyecto GTEST, Propiedades, Propiedades de configuración, el general. Asegúrese de que la configuración de depuración se selecciona (combo superior izquierda). Cambie la propiedad Nombre de destino a

 $(ProjectName)d

Tenga en cuenta el agregado "d" para cambiar el nombre de GTEST a gtestd. La advertencia es de otra manera benigna.

Creo que nadie tiene la respuesta correcta, he resuelto de esta manera:. En las propiedades del proyecto páginas, verificación si linker->General->Output file partido configuration properties->General->target name y configuration properties->General->target extension

no es necesario añadir ningún 'd', por supuesto, es más simple conjunto de Inherit from parent or project defaults, para las 3 variables.

Ejemplo:

Linker → General → Output File = "myproject.exe"

a continuación:

Configuration Properties → General → Target Name = "myproject"

configuration properties → General → Target Extension = ".exe"

Este tipo de errores suelen surgir cuando se actualiza proyecto vieja a la nueva versión de Visual Studio (al igual que en su caso para VS2010) y también si la configuración del proyecto se pueden haber cambiado manualmente (por ejemplo, el cambio de nombre del ejecutable). Sabemos VS2010 utiliza estas macros $(ProjectName) $(TargetName) $(OutDir) $(TargetExt) para controlar las salidas de liberación / depuración, pero a menudo es un misterio dónde cambiar ellos. Nos lo típico complejo de cambiar el nombre de los archivos de salida directamente a través del Proyecto >> Propiedades. Esto significa que ahora tienen que cambiar los archivos de salida por separado para depuración y liberación de construcción y si había alguna dependencia, obtendremos error como This may cause your project to build incorrectly..

Estas macros / VS2010 propiedades son valores por defecto, pero se les pueden fijarse en .vcproj archivos editando en el bloc de notas. Búsqueda nota en primer lugar para la propiedad en el archivo .vcproj primero, si es que hay que cambiar su valor, si no lo definen como a continuación.

  <PropertyGroup Label="My Values">
    <ProjectName>New_Project_Name</ProjectName>
  </PropertyGroup>

Sobre he definido un nuevo <property group> para mantener estos valores, pero se puede definir en cualquier lugar. Defino esta en la parte superior del archivo justo después de grupo de configuración de depuración / liberación por lo que su visible en todas partes. Asegúrese de que las propiedades del proyecto están configurados correctamente para usarlos correctamente (que debe ser lo que es VS2010 ajustes por defecto). Si los ha cambiado usted debe copiarlo de nuevo proyecto de prueba. Por supuesto, puede agregar las otras macros que desee valores establecidos en el grupo de arriba también.

También puede verificar los nuevos valores de esta macros a través de las propiedades del proyecto. Por ejemplo clic en Propiedades de configuración >> General y que en la caja 'Target Name'. Seleccione Editar. Se abrirá un cuadro de diálogo con el botón 'MACROS >>'. Haga clic en eso y se le mostrará lo que el valor de cada macro es. Debe reflejar correctamente los nuevos valores que se establece en .vcproj archivo.

Yo sólo estaba tratando de compilar una aplicación en Visual Studio 2019 que me había pasado compilado en Visual Studio 2005 . Me encontré con la misma advertencia.

pensé que iba a mostrar lo que hice visualmente con capturas de pantalla.

Solución Nombre Nombre de destino v

Como se puede ver, mis variables fueron establecen en Importar texto

imagen 1

Me podría haber establecido la $(TargetName) a ImportText para resolver mi problema. Sin embargo, vamos a dejar esos valores como son.

enlazador / Salida de archivo general

Esta es la forma que tenía la configuración del archivo de salida:

imagen 2

Tenga en cuenta que tuve reemplazado el nombre de destino de salida como ImportText . Esto fue hace más de 10 años y yo no tenía tanta experiencia.

General / Nombre de destino

Así que todo lo que tenía que hacer era hacer que el mismo ajuste aquí:

imagen 3

Ahora se compila el archivo.

Al igual que ha escrito Hans Passant, resulta necesario modificar la propiedad TargetName manualmente. Esto es diferente entre VS2005 / 2008 y VS2010. Por favor, consulte http: // social.msdn.microsoft.com/Forums/en-US/vcprerelease/thread/3c03e730-6a0e-4ee4-a0d6-6a5c3ce4343c

El trasfondo de esto es que Microsoft cambió el sentido de la macro $ (TargetName). Se utiliza para referirse a "lo que sea nombre de archivo que pone en Enlazador | Archivo de salida, menos la extensión". Lo cambiaron a "por defecto, el nombre de su proyecto". (Esto es algo que nunca debe hacer, en mi opinión, deberían haber añadido una nueva macro).

Mientras que VS2008 y anteriores fueron capaces de analizar el nombre de archivo de la configuración Linker, al parecer, no fueron capaces de analizar a cabo en la migración a nuevas versiones, dejando nuestras configuraciones rotas.

La advertencia en sí es probablemente no es importante, pero si se utiliza $ (TargetName), por ejemplo haciéndola pasar a un archivo por lotes, este cambio va a romper su proceso por lotes.

Para nosotros, la solución ha sido la de copiar el nombre del archivo (menos extensión) del vinculador | Archivo de salida al General | Nombre de destino, a continuación, establecer Enlazador | Archivo de salida a "Heredar del padre / default". Esto se debe a que utilizamos sufijos como "d" (para depuración), "u" para Unicode, _64 de 64 bits y así sucesivamente.

Por otro lado, si el archivo de salida siempre coincide con el nombre del proyecto, entonces todo lo que necesita hacer es establecer Enlazador | Archivo de salida en "default hereda" y ya está, en principio, - siempre que el directorio de salida que desea para su archivo compilado coincide general | Directorio de salida.

Este cambio es absolutamente exasperante, ya que implica mover literalmente cientos de opciones alrededor, todo debido a la pereza por parte de Microsoft, por lo que yo puedo ver.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top