2017-03-03 138 views
0

我下載了Cubist軟件的單線程Linux版本的C源代碼。代碼所做的是獲取輸入數據並生成迴歸樹模型。編譯C代碼時出現Makefile錯誤

當使用Ubuntu終端編譯源代碼時,它生成了帶有out錯誤的可執行文件。
這裏是makefile文件

CC = gcc -ffloat-store 
OFLAGS = -O3 
CFLAGS = -DVerbOpt -g -Wall -O0 
LFLAGS = $(S) 
SHELL = /bin/csh 
src =\ 
    global.c\ 
    xval.c\ 
    cubist.c\ 
    sort.c\ 
    construct.c\ 
    predict.c\ 
    stats.c\ 
    discr.c\ 
    rules.c\ 
    contin.c\ 
    formrules.c\ 
    formtree.c\ 
    getdata.c\ 
    getnames.c\ 
    implicitatt.c\ 
    instance.c\ 
    modelfiles.c\ 
    prunetree.c\ 
    regress.c\ 
    trees.c\ 
    update.c\ 
    utility.c 

obj =\ 
    global.o cubist.o construct.o\ 
    formtree.o prunetree.o stats.o discr.o contin.o\ 
    trees.o\ 
    formrules.o rules.o\ 
    instance.o\ 
    predict.o\ 
    regress.o\ 
    xval.o\ 
    getnames.o getdata.o implicitatt.o sort.o\ 
    modelfiles.o\ 
    update.o utility.o\ 

all: 
    make cubist 
    $(CC) $(LFLAGS) $(OFLAGS) -o summary summary.c -lm 


# debug version (including verbosity option) 

cubistdbg:\ 
    $(obj) defns.i extern.i text.i Makefile 
    $(CC) $(CFLAGS) -o cubistdbg $(obj) -lm 


# production version 

cubist:\ 
    $(src) defns.i text.i Makefile 
    cat defns.i $(src)\ 
     | egrep -v 'defns.i|extern.i' >cubistgt.c 
    $(CC) $(LFLAGS) $(OFLAGS) -o cubist cubistgt.c -lm 
    strip cubist 
    rm cubistgt.c 


$(obj):  Makefile defns.i extern.i text.i 


.c.o: 
    $(CC) $(CFLAGS) -c $< 

當我嘗試做類似的工作窗口,我得到錯誤信息

$ make all 
make cubist 
make: /bin/csh: Command not found 
make: *** [Makefile:56: all] Error 127 

但是,當我從Makefile中刪除SHELL =/bin中/ csh的嘗試,它的工作。我在這裏的問題是它對軟件有負面影響,或者如何解決它與刪除SHELL =/bin/csh。 非常感謝你

+1

所以你說你下載的Linux軟件,它不適用於Windows?我是否正確? – szpanczyk

+0

你是什麼意思的「類似的工作」。你正試圖在Linux shell源代碼中使用'make'嗎?你知道,如果源代碼是用於Linux的,它可能取決於某些東西,也許是系統的幾十個特性?你知道什麼是csh嗎?我在問,因爲我可能會評估錯誤的情況。但我認爲你不知道你在做什麼。 – szpanczyk

+1

我看不出在這個具體例子中'SHELL'設置可以影響任何東西。 – avysk

回答

1

我的猜測是,通過刪除行SHELL = /bin/csh你的結果是好的。

/bin/csh是主要在unix中使用的shell(命令行界面,命令處理器,命令提示符)。在你的makefile中它被定義了,但沒有被引用(未使用)。
有時makefiles可能需要一個shell(命令處理器)才能執行某個任務,但是它取決於makefile - 我的意思是,編寫makefile的人選擇使用該功能或​​不使用該功能,如果使用,可以(或必須)指定要使用的外殼。現在不是你的情況。