私はかなり簡単なメイクファイルを使用しています。.cc ファイルのリストを使用して OBJS を定義しました。依存関係とインクルード フラグを設定し、それらすべてを $CXXFLAGS に追加しました。次のようになります。
SRCS = file1.cc file2.cc file3.cc
OBJS = $(SRCS:.cc=.o)
CXXFLAGS=some flags
CXXFLAGS+=some include dirs
$(mylib.so): $OBJS
$CXX -shared -o $@ $^
mylib.so は CXXFLAGS を (暗黙的に) 使用し、すべて正常にビルドされます。
最近、mylib.so に加えて、mylib_1.so と mylib_2.so が必要になりました。各 .so はすべて同じ .cc ファイルに依存しますが、コンパイラ フラグはすべて異なります (インクルード ディレクトリを含む)。
ターゲット .so に基づいてコンパイラ フラグを設定できるようにするにはどうすればよいですか? 私が抱えている問題は、CXXFLAGS を複数回設定すると上書きされることです。if/else の状況が必要なようです。
$CXXFLAGS1、$CXXFLAGS2、$CXXFLAGS3の3つの異なるフラグを設定し、それらを行で使用するようなことを試しました
$(mylib1.so): $OBJS
$CXX $(CXXFLAGS1) -shared -o $@ $^
しかし、それは機能しません。
自分がやろうとしていることをどのように達成できますか? 3 つの個別の makefile を使用する方が良いですか? 私はそれを機能させる方法を見つけました。$OBJS の使用をやめて、ソース ファイルごとに明示的にフラグを指定することもできますが、これはサイズのスケーリングという点では恐ろしい考えのように思えます。