Вопросы по make-файлу: "CFLAGS" и "SHVER"? - PullRequest
0 голосов
/ 30 марта 2011

В make-файле я обнаружил, что автор заявил, что

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 ]

3 голосов
/ 30 марта 2011

Это просто переменные makefile.CFLAGS - это часто используемая переменная, которая содержит флаги, которые будут переданы компилятору C (например, gcc).Переменные make-файла раскрываются позже, поэтому, когда вы видите, например,

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 голосов
/ 30 марта 2011

CFLAGS - это имя переменной make, широко используемое для хранения параметров, передаваемых компилятору.

SHVER - менее используемое имя переменной, но обычно оно содержит номер версии разделяемой библиотеки, которая должна использоваться (или сгенерированный) в процессе создания (SH для общего доступа, VER для версии)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...