¿Es posible hacer que Microsoft build.exe incluya fuentes de directorios remotos?

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

  •  03-07-2019
  •  | 
  •  

Pregunta

Adición de archivos de origen a más de un directorio (por ejemplo, ../../source.cpp o ../../../somewhere_else/source.cpp, en lugar de solo source.cpp o ../source. cpp) a la declaración SOURCES = en una compilación WDK / DDK produce el siguiente error:

Ignoring invalid directory prefix in SOURCES= entry

¿Es posible incluir archivos de origen remotos en una compilación?

¿Fue útil?

Solución

No es posible hacer esto directamente. build está diseñado explícitamente solo para tratar con Código fuente en el mismo directorio o en el directorio principal del archivo sources . No puede usar archivos de origen de ubicaciones arbitrarias. En particular, su sistema de seguimiento de dependencias parece incapaz de analizar y rastrear archivos remotos y, por lo tanto, verifica y aplica explícitamente que todos los archivos sean locales.

Hay dos soluciones comunes:

  1. Cree el código remoto como una biblioteca separada (ya sea a través de otro subproyecto / directorio en el mismo proyecto build , o usando un paso de compilación independiente).

  2. Coloque un apéndice local para cada archivo de origen remoto que haga #include " ../../ remote_source.cpp , y agregue este apéndice local al SOURCES = lista, en su lugar. Esto funcionará, pero build / nmake no not rastreará las dependencias en remote_source.cpp . Si remote_source.cpp cambia, deberá tocar la fuente del proxy local o, de lo contrario, forzar una reconstrucción (elimine el proxy local obj, ejecute build con -cZ , o de otro modo).

Otros consejos

Una forma alternativa es usar source.inc para incluir estos archivos.

Odio resucitar un tema super viejo, pero también me encontré con esto.

Una forma alternativa alternativa es crear otro archivo de fuentes dentro que solo genere archivos de objetos de la fuente remota, así que básicamente un archivo llamado somewhere_else \ sources , y darle el mismo directorio intermedio.

Luego agregue un archivo 'dirs' a su directorio original y especifique esa carpeta remota en su interior. Luego vincule directamente al archivo de objeto agregando algo como esto al archivo de fuentes original:

$(TARGETLIBS) = $(PROJECT_OBJ_ROOT)\$(O)\source.obj

De esta manera, no tiene que compilar como lib, sino que la compilación se trata como una y se vincula sin ninguna verificación de dependencia o cuidado de la ubicación.

Naturalmente, puede tener algunos problemas si les da el mismo directorio intermedio y el mismo nombre de archivo de origen original (source.cpp)

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