È possibile fare in modo che Microsoft build.exe includa origini da directory remote?

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

  •  03-07-2019
  •  | 
  •  

Domanda

Aggiunta di file di origine a più di una directory (ad es. ../../source.cpp o ../../../somewhere_else/source.cpp, anziché solo source.cpp o ../source. cpp) alla dichiarazione SOURCES = in una build WDK / DDK genera il seguente errore:

Ignoring invalid directory prefix in SOURCES= entry

È possibile includere file sorgente remoti in una build?

È stato utile?

Soluzione

Non è possibile farlo direttamente. build è esplicitamente progettato solo per gestire codice sorgente nella stessa directory o padre del file fonti . Non può utilizzare file di origine da posizioni arbitrarie. In particolare, il suo sistema di tracciamento delle dipendenze sembra incapace di analizzare e tracciare i file remoti, e quindi controlla esplicitamente e impone che tutti i file siano locali.

Esistono due soluzioni comuni:

  1. Costruisci il codice remoto come lib separata (o tramite un'altra sottoprogetto / directory nello stesso progetto build , o usando un passo di compilazione indipendente).

  2. Posiziona uno stub locale per ogni file sorgente remoto che contiene #include " ../../ remote_source.cpp e aggiungi questo stub locale a SOURCES = , invece. Funzionerà, ma build / nmake non terrà traccia delle dipendenze in remote_source.cpp . Se remote_source.cpp cambia, dovrai toccare l'origine proxy locale o forzare in altro modo una ricostruzione (elimina l'obj proxy locale, esegui build con -cZ , o altrimenti).

Altri suggerimenti

Un modo alternativo è usare source.inc per includere questi file.

Odio risorgere un argomento molto vecchio, ma mi sono appena imbattuto anche in questo.

Un modo alternativo alternativo è quello di creare un altro file di sorgenti all'interno che costruisca esclusivamente file di oggetti della fonte remota, quindi fondamentalmente un file chiamato somewhere_else \ sources e assegnargli la stessa directory intermedia.

Quindi aggiungi un file 'dirs' alla tua directory originale e specifica quella cartella remota all'interno. Quindi collegare direttamente al file oggetto aggiungendo qualcosa di simile al file sorgente originale:

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

In questo modo, non è necessario compilare come lib, ma costruire lo tratta come uno e si collega senza alcun controllo delle dipendenze o cura della posizione.

Naturalmente potresti riscontrare alcuni problemi se dai loro la stessa directory intermedia e lo stesso nome del file sorgente originale (source.cpp)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top