Est-il possible de faire en sorte que Microsoft build.exe inclue des sources à partir de répertoires distants?

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

  •  03-07-2019
  •  | 
  •  

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?

Était-ce utile?

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:

  1. 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).

  2. Placez un fichier de remplacement local pour chaque fichier source distant contenant #include " ../../ remote_source.cpp , puis ajoutez ce fichier de remplacement local au SOURCES = liste, à la place. Cela fonctionnera, mais build / nmake ne ne suivra pas les dépendances dans remote_source.cpp . Si remote_source.cpp change, vous devrez toucher la source de proxy locale ou sinon forcer une reconstruction (supprimer le proxy local obj, exécuter construire 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)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top