Penso che il tuo problema sarà difficile da risolvere. Sospetto che header.h sia incluso da un file nella cartella include1.
Ciò significa che la norma C include il percorso è
- Directory del (o file di intestazione che include una sub file) file sorgente.
- L'ordine definito dalla riga di comando include.
Quindi per risolvere questo problema, dovremmo essere in grado di interrompere (in qualche modo) la regola 1 dal licenziamento.
L'uso di #include "projecta/header.h"
e #include "projectb/header.h"
sono metodi normali per ottenere ciò, se non si è interessati alla modifica della sorgente.
Nel tuo caso, si vuole garantire il vostro (include2 è inclusa.)
metodi si potrebbe applicare.
Se il codice precedente (file .c/.cpp) è modificabile, assicurati di avere #include "include2/header.h" - which should also set up so all requirements for
include1/header.h`.
se include1/header.h
ha una guardia di includere (#if ! defined(H_HEADER_H)
) quindi definire questo nella riga di comando (/DH_HEADER_H
), in modo che non è incluso - questo è un salto nel buio, in quanto il file non sarà raggiungere il suo scopo.
Scrivere uno script di modifica del testo (sed?) Per modificare "header.h" come "include2/header.h" - che garantisce che tutte le occorrenze nell'origine scelgano la propria versione. Non si tratta di una specifica specifica, ma potrebbe essere concepita come lasciando la fonte invariata, in quanto sarebbe un passo precompilato.
L'obiettivo per garantire il cambiamento dell'ordine di inclusione può essere ottenuto creando 2 progetti separati, uno che utilizza include1/header.h
e il codice originale invariato. Quindi offre include2/header.h
come interfaccia che viene modificata in qualche modo.
Probabilmente questa ambiguità dovrebbe essere risolta in altri modi. Cosa succede se si desidera utilizzare entrambe le intestazioni nello stesso progetto? Ad esempio, se li inseriresti in una directory, risolverebbe questo problema. Quindi ci sarebbe un #include "Folder1 \ header.h" e la versione Folder2, – Melkon
Quello che sto cercando di ottenere è la sostituzione di un file di intestazione del progetto C esistente, con un file di intestazione del mio, senza toccare i file originali (quindi nessun ifdefs nell'intestazione originale e nessuna modifica delle direttive #include nelle fonti). Il modo semplice è di non utilizzare la directory con quel file di intestazione originale, ma ha alcuni altri file di intestazione originale che non è necessario sostituire. – user1483597
Esiste un'impostazione di progetto "Directory C++" che probabilmente viene cercata prima delle "directory aggiuntive". Se aggiungi il tuo 'Folder1' prima nella lista principale, sarà sicuramente cercato per primo. –