2009-08-25 5 views
3

Si je mets des commentaires (# ...) dans mon Makefile, make me donne une erreur et quitte. Si je supprime les commentaires, le makefile fonctionne bien.Makefile ne peut pas comprendre les commentaires

Makefile:1: *** missing separator. Stop. 
  • Marque-Version: 3.81
  • Linux: Ubuntu 9,04

Le Makefile:

# Backup Makefile 
# 
# Create backups from various services and the system itself. This 
# script is used to perform single backup tasks or a whole backup 
# from the system. For more information about this file and how to 
# use it, read the README file in the same directory. 

BACKUP_ROOT = /srv/backup 
ETC_PATH = /srv/config 
SVN_PATH = /srv/svn/ 
TRAC_PATH = /srv/trac/sysinventory 
PR10_PATH = /swsd/project/vmimages/... 
PR10_MOUNT_PATH = /tmp/temp_sshfs_pr10 

MYSQL_USER = "xxx" 
MYSQL_PASSWORD = "xxx" 


DATE = `date +%F` 

help : 
     cat README 

init-environment : 
     mkdir -p $(BACKUP_ROOT) 
     mkdir $(BACKUP_ROOT)/tmp 
     mkdir -p $(PR10_MOUNT_PATH) 

backup : backup-mysql backup-configuration backup-svn backup-trac 

upload-to-pr10 : mount-pr10 
     tar cf $(DATE)-backup-blizzard.tar -C $(BACKUP_ROOT) *.-backup.tar.gz 
     mv $(BACKUP_ROOT)/*-backup-blizzard.tar $(PR10_MOUNT_PATH)/ 
     umount $(PR10_MOUNT_PATH) 

mount-pr10 : 
     su xxx -d "sshfs -o allow_root [email protected]:$(PR10_PATH) $(PR10_MOUNT_PATH)" 
     fusermount -u $(PR10_MOUNT_PATH) 

backup-mysql : 
     mysqldump --comments --user=$(MYSQL_USER) --password=$(MYSQL_PASSWORD) --all-databases --result-file=$(BACKUP_ROOT)/tmp/mysql_dump.sql 
     tar czf $(BACKUP_ROOT)/$(DATE)-mysql-backup.tar.gz -C 
     $(BACKUP_ROOT)/tmp/mysql_dump.sql 

backup-configuration : 
     tar czf $(BACKUP_ROOT)/$(DATE)-configuration-backup.tar.gz $(ETC_PATH)/ 

backup-svn : 
     svnadmin dump $(SVN_PATH)/repository > $(BACKUP_ROOT)/tmp/svn_repository.dump 
     tar czf $(BACKUP_ROOT)/$(DATE)-subversion-backup.tar.gz -C $(BACKUP_ROOT)/tmp/svn_repository.dump 

backup-trac : 
     tar czf $(BACKUP_ROOT)/$(DATE)-trac-backup.tar.gz $(TRAC_PATH)/ 

clean : 
     rm -f $(BACKUP_ROOT)/tmp/mysql_dump.sql 
     rm -f $(BACKUP_ROOT)/tmp/svn_repository.dump 
     rm -f $(BACKUP_ROOT)/*-backup.tar.gz 
     rm -f $(BACKUP_ROOT)/*-backup-blizzard.tar 
+1

Postez le makefile –

+0

J'ai essayé avec la même version de Make. Ajouter des commentaires n'importe où a bien fonctionné, alors il est clair que vous faites quelque chose de mal. – jrockway

+0

J'ai posté le fichier makefile. – Fu86

Répondre

9

Votre fichier Makefile fonctionne pour moi (avec des espaces remplacés par des onglets), donc il semble que vous ayez un cas de caractères parasites non imprimables. Essayez d'inspecter la sortie de "cat -vet Makefile". Cela montrera où sont EOL, TAB et d'autres chars invisibles.

Vous voulez voir quelque chose comme ceci:

# Backup Makefile$ 
#$ 
# Create backups from various services and the system itself. This$ 
# script is used to perform single backup tasks or a whole backup$ 
# from the system. For more information about this file and how to$ 
# use it, read the README file in the same directory.$ 
$ 
BACKUP_ROOT = /srv/backup$ 
ETC_PATH = /srv/config$ 
SVN_PATH = /srv/svn/$ 
TRAC_PATH = /srv/trac/sysinventory$ 
PR10_PATH = /swsd/project/vmimages/...$ 
PR10_MOUNT_PATH = /tmp/temp_sshfs_pr10$ 
$ 
MYSQL_USER = "xxx"$ 
MYSQL_PASSWORD = "xxx"$ 
$ 
$ 
DATE = `date +%F`$ 
$ 
help :$ 
^Icat README$ 
$ 
$ 
init-environment :$ 
^Imkdir -p $(BACKUP_ROOT)$ 
^Imkdir $(BACKUP_ROOT)/tmp$ 
^Imkdir -p $(PR10_MOUNT_PATH)$ 
$ 

Assurez-vous que toutes les commandes sont précédées par « ^I ».

Vous pouvez aussi chercher les caractères errants en utilisant quelque chose comme:

cat -vet Makefile | grep "\^[^I]" --colour=auto 
+0

'chat -vet' - ne veut pas! – rishta

1

Vous avez sans doute utilisé des espaces au lieu des onglets pour votre commentaire. S'il vous plaît poster le makefile afin que nous ne devions pas deviner.

+0

Si c'est le problème (très probable), l'affichage sur le SO (ou l'Internet en général) ne vous aidera pas trop. Qui utilise les onglets sur internet? –

+0

Non, il n'y a pas d'onglets dans les commentaires. – Fu86

+0

Je me suis mal exprimé. Les onglets devraient être dans vos règles. Je pensais que vous auriez des commentaires dans vos règles qui avaient des espaces devant eux au lieu d'onglets. Cela ne semble pas être le cas (vous n'avez aucun commentaire dans les règles). –

Questions connexes