Est-il possible de faire en sorte que Microsoft build.exe inclue des sources à partir de répertoires distants?
Question
Ajouter des fichiers source à plus d’un répertoire (par exemple, ../../source.cpp ou ../../../somewhere_else/source.cpp, par opposition à simplement source.cpp ou ../source. cpp) à la déclaration SOURCES = dans une version WDK / DDK génère l'erreur suivante:
Ignoring invalid directory prefix in SOURCES= entry
Est-il possible d'inclure des fichiers source distants dans une construction?
La solution
Il n’est pas possible de le faire directement. build
est explicitement conçu uniquement pour traiter
code source dans le même répertoire ou répertoire parent du fichier sources
. Il ne peut pas utiliser les fichiers source à partir d'emplacements arbitraires. En particulier, son système de suivi des dépendances semble incapable d'analyser et de suivre les fichiers distants. Par conséquent, il vérifie et impose explicitement que tous les fichiers sont locaux.
Il existe deux solutions communes:
-
Construisez le code distant en tant que bibliothèque distincte (soit via un autre sous-projet / répertoire dans le même projet
build
, soit en utilisant une étape de construction indépendante). -
Placez un fichier de remplacement local pour chaque fichier source distant contenant
#include " ../../ remote_source.cpp
, puis ajoutez ce fichier de remplacement local auSOURCES =
liste, à la place. Cela fonctionnera, maisbuild
/nmake
ne ne suivra pas les dépendances dansremote_source.cpp
. Siremote_source.cpp
change, vous devreztoucher
la source de proxy locale ou sinon forcer une reconstruction (supprimer le proxy local obj, exécuterconstruire
avec-cZ
ou autrement).
Autres conseils
Une autre solution consiste à utiliser source.inc pour inclure ces fichiers.
Hate de ressusciter un très vieux sujet, mais je viens de le rencontrer aussi.
Une autre solution consiste à créer un autre fichier de sources à l'intérieur, qui construit uniquement des fichiers objets de la source distante. Il s'agit donc d'un fichier nommé Place_else \ sources et lui attribue le même répertoire intermédiaire.
Ajoutez ensuite un fichier 'dirs' dans votre répertoire d'origine et spécifiez ce dossier distant à l'intérieur. Liez ensuite directement le fichier objet en ajoutant quelque chose comme ceci au fichier source original:
$(TARGETLIBS) = $(PROJECT_OBJ_ROOT)\$(O)\source.obj
De cette façon, vous n'avez pas besoin de compiler en tant que lib, mais build le traite comme s'il s'agissait d'un lien et sans liens, sans vérification de la dépendance ou soin de l'emplacement.
Naturellement, vous pouvez rencontrer certains problèmes si vous leur attribuez le même répertoire intermédiaire et le même nom de fichier source d'origine (source.cpp)