2011-07-30 11 views

答えて

2

GNU makeには、非常に便利な意味がありますが、よく見落とされる機能はcomputed variable namesです。

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}) 

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

は通常、しかし、あなたは利用者からのコンパイラ名とバージョンに応じて設定コンパイラオプションを受け入れるようにしたい:この機能を使用すると、条件文を避け、コードが短く、読みやすくすることができます

出力:ああ、それを得た

$ 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. 
+0

ありがとう!非常に有益! – MetallicPriest

6

ifeqの後にスペースが必要です。それが問題を解決しました。

関連する問題