2011-03-30 73 views
0

在一个makefile,我发现作者说,有关makefile的问题:“CFLAGS”和“SHVER”?

CFLAGS = -Wall -Wconversion -O3 -fPIC 
SHVER = 2 

什么是这两行的功能?

这里是充满了生成文件:

CXX ?= g++ 
CFLAGS = -Wall -Wconversion -O3 -fPIC 
SHVER = 2 

all: svm-train svm-predict svm-scale 

lib: svm.o 
    $(CXX) -shared -dynamiclib svm.o -o libsvm.so.$(SHVER) 

svm-predict: svm-predict.c svm.o 
    $(CXX) $(CFLAGS) svm-predict.c svm.o -o svm-predict -lm 
svm-train: svm-train.c svm.o 
    $(CXX) $(CFLAGS) svm-train.c svm.o -o svm-train -lm 
svm-scale: svm-scale.c 
    $(CXX) $(CFLAGS) svm-scale.c -o svm-scale 
svm.o: svm.cpp svm.h 
    $(CXX) $(CFLAGS) -c svm.cpp 
clean: 
    rm -f *~ svm.o svm-train svm-predict svm-scale libsvm.so.$(SHVER) 

回答

3

这些只是makefile的变量。 CFLAGS是一个常用变量,它包含将传递给C编译器(例如gcc)的标志。 Makefile变量稍后会被扩展,所以当你看到例如

svm.o: svm.cpp svm.h 
    $(CXX) $(CFLAGS) -c svm.cpp 

这将让扩展为:

g++ -Wall -Wconversion -O3 -fPIC -c svm.cpp 

同样SHVER是共享库的版本号,所以在这种依赖的情况下,构建命令:

lib: svm.o 
    $(CXX) -shared -dynamiclib svm.o -o libsvm.so.$(SHVER) 

这将让扩展为:

g++ -shared -dynamiclib svm.o -o libsvm.so.2 
+0

它可能是shell版本(SHVER) – Dimitri 2011-03-30 14:44:03

+0

@Dimitri:是 - 可能是 - 没有看到makefile的其余部分,很难猜测它是如何被使用的。 – 2011-03-30 14:45:48

0

CFLAGS是一个广泛用于保存要传递给编译器的选项的make变量名称

SHVER是一个较少使用的变量名称,但它通常包含要使用(或生成)的共享库的版本号,在制作过程中(SH用于共享,VER用于版本)