visual tools studio microsoft descargar community visual-studio-2012 msbuild clang visual-studio-sdk

visual studio 2012 - tools - ¿Cómo extraer argumentos de compilación para cada unidad de compilación en un vcxproj?



visual studio installer (4)

Estoy tratando de obtener los argumentos de compilación para cada unidad de compilación para poder crear el " compilation_commands.json " para mi vcxproj que se puede usar con clanTools.

El tutorial de libTooling sugiere usar una base de datos de CompilationDatabase para proporcionar los argumentos de compilación para todos los archivos cpp en un proyecto. El tutorial muestra que CMake puede generar compilation_commands.json para proyectos basados ​​en CMake.

Como clang se puede poner en "modo clang.exe --driver-mode=cl " a través de clang.exe --driver-mode=cl o clang-cl.exe pensé que si podía obtener los argumentos de compilación para cada archivo cpp en mi proyecto VS2012, puedo crear los compilation_commands .json para un vcxproj.

Sin embargo, tengo problemas para encontrar API en el SDK de VS2012 que anda con un vcxproj y recupera los argumentos de compilación para cada unidad de compilación. ¿Puede alguien señalarme hacia las API correctas?


Es un trabajo de bricolaje. Los proyectos VS IDE tienen propiedades para cada archivo .cpp. Al seleccionar un .cpp, a continuación, haga clic con el botón derecho -> Propiedades -> Propiedades de configuración -> C / C ++ -> Línea de comandos tendrá las opciones necesarias para compilar ese archivo específico. La pregunta de 64 dólares es cómo hacerlo por cada gile en el proyecto / solución. La respuesta no es trivial, pero es factible. Al menos lo hice en VS 2010 y estoy bastante seguro de que funciona en VS 2012/3

El secreto está en lo que se llama VCEngine. Es una herramienta que evalúa todas las propiedades o los archivos en el proyecto. Entonces, el verdadero problema es cómo evaluar la propiedad "Línea de comando" para cada archivo. Necesita iterar a través de todos los archivos .cpp y llamar al método Evaluar de VCProject para la propiedad "Línea de comando".

La forma más simple en la que creo que puede hacerlo es escribir un complemento para VS IDE y así obtener acceso a la instancia de VCEngine. Hay muchos ejemplos de cómo hacer eso. Tenga en cuenta que VCEngine depende de la versión.

Anywhay, para proyectos / soluciones con miles de archivos .cpp, necesita automatizar la creación de la base de datos de compilación.

Cuando tenga tiempo, pondré la solución en github