2012-11-21 34 views
0

我試圖用make.While編譯我得到一個錯誤生成文件在Ubuntu給附近意外的標記'(

/斌/慶典編譯程序在Ubuntu 12.04 64位的bash語法錯誤:-c:行0:近意外的標記'(

這之後我改變了/bin/sh的符號鏈接/bin/bash,而不是短跑語法錯誤(我這樣做是因爲我有同樣的錯誤類型前,環顧四周,我發現互聯網。該腳本可能會調用在sh/dash中不可用的bash函數。)

我也嘗試把SHELL = /bin/bash放在我的生成文件的頂部,但仍然沒有用...

任何幫助將不勝感激。

編輯

SHELL = /bin/bash 
CC = gcc 
CFLAGS= -std=gnu99 -L/ATLAS/lib/ubuntu12.04 -lflint -lgsl -lcblas -latlas -lm -lmpfr -lmpir -lrt -Wall -fopenmp 
default: GPVSignature 
GPVSignature: GPVSignature.o Keygeneration.o chol_parallel.o Sampling2.o sha1.o  sha2.o timing.o 
    $(CC) $(CFLAGS) -o GPVSignature GPVSignature.o Keygeneration.o chol_parallel.o Sampling2.o sha1.o sha2.o timing.o 

clean: 
     rm -f GPVSignature *.o 


SSH_AGENT_PID=2065 
GPG_AGENT_INFO=/tmp/keyring-alBJt6/gpg:0:1 
TERM=xterm 
SHELL=/bin/bash 
XDG_SESSION_COOKIE=ff0e3de12be325b4ae6276d100000009-1353535027.801191-1696704263 
WINDOWID=56623110 
GNOME_KEYRING_CONTROL=/tmp/keyring-alBJt6 
NO_PROXY=localhost,127.0.0.0/8 
USER=salman 
http_proxy=http:(---) 
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40; 33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36: 
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0 
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0 
SSH_AUTH_SOCK=/tmp/keyring-alBJt6/ssh 
SESSION_MANAGER=local/ubuntu:@/tmp/.ICE-unix/2026,unix/ubuntu:/tmp/.ICE-unix/2026 
DEFAULTS_PATH=/usr/share/gconf/ubuntu.default.path 
XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg 
PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin: /bin:/usr/games 
DESKTOP_SESSION=ubuntu 
PWD=/home/salman/ 
GNOME_KEYRING_PID=2015 
LANG=en_US.UTF-8 
MANDATORY_PATH=/usr/share/gconf/ubuntu.mandatory.path 
UBUNTU_MENUPROXY=libappmenu.so 
COMPIZ_CONFIG_PROFILE=ubuntu 
GDMSESSION=ubuntu 
HOME=/home/salman 
SHLVL=1 
GNOME_DESKTOP_SESSION_ID=this-is-deprecated 
no_proxy=localhost,127.0.0.0/8 
LOGNAME=salman 
BUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-RUfHXImIYm,guid=c49ca476a7f4b008964105c90000004e 
LESSOPEN=| /usr/bin/lesspipe %s 
DISPLAY=:0 
XDG_CURRENT_DESKTOP=Unity 
LESSCLOSE=/usr/bin/lesspipe %s %s 
COLORTERM=gnome-terminal 
XAUTHORITY=/home/salman/.Xauthority 
_=/usr/bin/env 
OLDPWD=/home/salman/Desktop 
+1

如果您至少可以顯示某些有問題的Makefile,這將有所幫助。 –

+0

這個makefile是在Windows/Mac上編輯的(錯誤行結束符)?你的'.bashrc'或者其他'bash'啓動文件是什麼? – twalberg

+0

與您的問題無關,但'-l'標誌屬於'LDFLAGS'而不是'CFLAGS'。 –

回答

0

這個怎麼樣?:

SHELL:=/bin/bash 
CC:=gcc 
CFLAGS:=-std=gnu99 -L/ATLAS/lib/ubuntu12.04 -lflint -lgsl -lcblas -latlas -lm -lmpfr -lmpir -lrt -Wall -fopenmp 

default: GPVSignature 
GPVSignature: GPVSignature.c Keygeneration.c chol_parallel.c Sampling2.c sha1.c  sha2.c timing.c 

clean: 
    rm -f GPVSignature *.o 

縮進下clean:線(rm之前)是一個TAB字符!這個很重要。我的猜測是,您的配方行上沒有正確的縮進(GPVSignature:clean:下)。另外,你不需要給出明確的配方,因爲GNU make帶有許多自己的配方。

注:我假設的文件擴展名是.c在這裏,因爲它是一貫的和你使用gcc,不g++。如果不是這種情況,則需要引入一個模式規則,以告訴GNU如何使用源文件的任何擴展名創建.o文件。

即使假設你原來的配方,我建議以下更簡潔行:

$(CC) $(CFLAGS) -o [email protected] $^ 

...也由單一的製表符縮進(除非你告訴GNU讓使用不同的性格,這你顯然不)。


還有兩件事。

  1. Makefile/GNUmakefile是一個簡單的ASCII文本文件還是帶有BOM的UTF-8文件?請執行file Makefile併發布輸出。
  2. 檢查以下屏幕截圖。這個(第二個屏幕截圖)是它應該如何在Vim中用標籤正確縮進(假設你已經安裝了語法文件)......特別注意GPVSignature的配方顏色。第一張截圖是錯誤的,第二個是

Wrong indentation of make file, notice the white/gray text for the recipe line

Correct indentation

除此之外,我的想法。而且必須有一些你沒有提及的東西。

+0

感謝您的回覆...我已經檢查了所有的東西你在你的文章中提到過有關縮進,並沒有發現任何錯誤。也試過$(CC)$(CFLAGS)-o $ @ $ ^並使用源代碼.c文件而不是對象,但錯誤是一樣的... – Salman

+0

@ Salman:如果這是你的* full * Makefile,那麼中斷的唯一來源就是環境。請發佈'env'的輸出(您可以省略用戶名等)*或*僅發佈任何違規行爲w.r.t. GNU make使用的變量。同時發佈您用於調用make過程的* exact *命令行。 – 0xC0000022L

+0

在問題中添加了env輸出。對於make過程,我只需在終端中鍵入make。 – Salman

相關問題