Что не так с этим make-файлом - PullRequest
2 голосов
/ 30 июля 2011

В верхней части моего make-файла у меня есть следующее.

USE_44 = 0
ifeq($(USE_44), 0)
    CXX = g++
else
    CXX = g++44
endif

Но я получаю ошибку

makefile:2: *** missing separator.  Stop.

что я здесь не так делаю?

Ответы [ 2 ]

6 голосов
/ 30 июля 2011

Требуется пробел после ifeq.Это решило проблему.

2 голосов
/ 01 августа 2011

GNU make имеет очень полезную, но часто упускаемую из виду функцию, называемую именами вычисляемых переменных .Использование этой функции позволяет избежать условных выражений и сделать код короче и более читабельным:

USE_44 := 0
cxx.0 := g++
cxx.1 := g++44
CXX := ${cxx.${USE_44}} 

Обычно, однако, вы хотите принять имя компилятора от пользователя и установить параметры компилятора в зависимости от версии:

CXX := g++
cxx_version_ := $(subst ., ,$(shell ${CXX} -dumpversion))
cxx_major_ := $(word 1,${cxx_version_})
cxx_minor_ := $(word 2,${cxx_version_})

cxxflags.4 := -Wno-multichar
cxxflags.4.3 := ${cxxflags.4} -march=native -fdiagnostics-show-option
cxxflags.4.4 := ${cxxflags.4.3} -Werror=return-type -Werror=reorder
cxxflags.4.5 := ${cxxflags.4.4}
CXXFLAGS := ${cxxflags.${cxx_major_}.${cxx_minor_}}

$(info g++ version is ${cxx_major_}.${cxx_minor_})
$(info g++ options are ${CXXFLAGS})

Выход:

$ make
g++ version is 4.5
g++ options are -Wno-multichar -march=native -fdiagnostics-show-option -Werror=return-type -Werror=reorder
make: *** No targets.  Stop.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...