关于makefile的问题:“CFLAGS”和“SHVER”?

时间:2011-03-30 14:39:16

标签: makefile

在makefile中,我发现作者声明

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

这两条线的功能是什么?

这是完整的makefile:

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)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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