2009-03-16 5 views
4

Je suis l'aide de Visual Studio 2005 nmake, et j'ai un makefile test comme celui-ci:Comment puis-je créer un répertoire dans un makefile

sometarget: 
    -mkdir c:\testdir 

Je veux toujours créer le répertoire, sans avoir à spécifier ' sometarget '. Par exemple, je peux le faire:

!if [if not exist c:\testdir\$(null) mkdir c:\testdir] 
!endif 

Mais cela nécessite deux lignes, où je veux vraiment que faire le « -mkdir c: \ testdir ». Si je le remplace simplement par "-mkdir c: \ testdir", j'obtiens une erreur de nmake - "erreur fatale U1034: erreur de syntaxe: séparateur manquant".

Comment puis-je toujours exécuter le mkdir, sans se tromper avec!

Répondre

7

Make veut toujours faire des choses basées sur des cibles. Ce n'est pas un outil de script général. Il regarde les cibles et vérifie si elles existent. Si la cible n'existe pas, elle exécute les commandes pour cette cible. La manière habituelle de faire ceci est d'avoir une cible fictive qui ne sera jamais générée par les scripts make, donc à chaque exécution, elle doit exécuter les commandes appropriées. Ou, vous pouvez ajouter la commande à un fichier de commandes qui appelle ensuite votre fichier make.

9

Je pense que cela va fonctionner:

[email protected] if NOT EXIST "dir" mkdir "dir" 
+0

enfin quelqu'un l'a juste montré sans trop parler! – holms

+0

Cela a fonctionné pour moi sur Windows 7, exactement ce dont j'avais besoin. – bdforbes

-2

Essayez d'utiliser ceci:

-mkdir -p c:\testdir 
3

Je ne suis pas sûr qu'il y ait un équivalent dans Windows avec nmake, mais je réussi à créer un répertoire sans utiliser de cibles sur Linux. J'ai utilisé la fonction make "shell". Par exemple:

# Find where we are 
TOPDIR := $(shell pwd) 
# Define destination directory 
ROOTFS := $(TOPDIR)/rootfs 
# Make sure destination directory exists before invoking any tags 
$(shell [ -d "$(ROOTFS)" ] || mkdir -p $(ROOTFS)) 

all: 
    @if [ -d "$(ROOTFS)" ]; then echo "Cool!"; else echo "Darn!"; fi 

J'espère que Windows a l'équivalent.

+0

Merci! C'était juste ce dont j'avais besoin –

Questions connexes