2009-05-08 7 views
1

En utilisant nmake, est-il possible que makefile construise automatiquement tous les fichiers .cpp dans le répertoire courant, sans avoir à les spécifier individuellement?Utilisez NMAKE pour créer toutes les sources dans un répertoire?

Ainsi, au lieu de quelque chose comme:

O = $(OBJ_DIR)/main.obj 
{$(SOURCE_DIR)}.cpp{$(OBJ_DIR)}.obj: 
    ---COMPILE $< HERE--- 

Je voudrais éviter d'avoir à spécifier chaque obj à faire. Cela peut-il être fait?

Répondre

-2

Je pense que cela peut être fait avec des jokers dans GNU make (et IIRC vous pouvez l'exécuter sur Windows). Mis à part cela, je suis désolé mais je ne connais pas nmake.

0

Vous pouvez utiliser une règle comme ceci:

{src\mystuff}.c{tmp\src\mystuff}.obj:: 
    $(CC) /nologo $(CFLAGS) /c /Fotmp\src\mystuff\ $< 

qui trouvera et compiler tous les fichiers .c dans src\mystuff et mettre les fichiers objets dans tmp\src\mystuff. Remplacez .cpp par .c dans votre cas.

Notez que le premier caractère de la deuxième ligne doit être un onglet, pas des espaces.

En outre, $(CC) est prédéfini par nmake être cl, et vous pouvez ajouter des drapeaux du compilateur vous devez $(CFLAGS), les coder en dur dans la règle ou ajouter une autre variable il, comme vous préférez.

3
.cpp.obj: 
    $(CC) $(CFLAGS) $*.cpp 

est une règle par défaut qui résoudra automatiquement les dépendances .obj de fichiers .cpp ...

+1

Eh bien, non. Il explique juste comment le faire, il ne le fait pas faire. – reinierpost

+0

@reinierpost oui vous êtes techniquement correct. C'est vrai de tout le makefile; il décrit les actions requises pour résoudre les dépendances et produire des résultats. –

+0

Eh bien, je pense que vous répondez à une question différente de celle que vous voulez poser, mais comme d'autres fournissent la même réponse, je suppose que je me trompe. – reinierpost

0

Une possibilité est d'envelopper la marque dans un script. Utilisez une boucle for, appelez make sur chaque fichier .cpp ou créez une liste de fichiers cpp et utilisez-la comme paramètre dans le fichier makefile.

1

Vous pouvez exécuter une commande shell pendant le prétraitement nmakefile, puis !include la sortie. Naturellement, la sortie doit être au format nmake. Quelque chose comme:

!if [bash -c "echo O = *.cpp" >sources.mak] 
!error Failed to generate source list 
!endif 
!include sources.mak 

all: $(O:.cpp=.obj) 

.cpp.obj: 
    ---COMPILE $< HERE--- 

Je soupçonne que la plupart des gens ne seraient pas utiliser bash pour créer sources.mak, mais vous voyez l'idée.