🐕
MPCの記述例
はじめに
Makefileを作成してくれるMPCですが、久しぶりに使ったら忘れていて調べ直したので記述例の記録になります。
MPCは「The Makefile, Project and Workspace Creator」の略で以下を参照
基本形
test1.mpc
project(test1) : aceexe {
exename = test1
macros += _FILE_OFFSET_BITS=64
includes += ${PROJECT_HOME}/include
libpaths += ${PROJECT_HOME}/lib
libs += pthread
specific(gnuace) {
compile_flags += -std=c++11
}
Source_Files {
*.cpp
}
}
実行ファイル
test1_exe.mpc
project(test1) : aceexe {
exename = test1
}
ダイナミックライブラリ
test1_so.mpc
project(test1) : acelib {
sharedname = test1
}
platform_macros.GNUに以下を設定していること
$ACE_ROOT/include/makeinclude/platform_macros.GNU
no_hidden_visibility=1
スタティックライブラリ
test1_a.mpc
project(test1) : acelib {
staticname = test1
}
MPC作成時の引数に-staticの追加
$ACE_ROOT/bin/mpc.pl -static -type gnuace test1_a.mpc
platform_macros.GNU等に以下の設定を行ってはならない
$ACE_ROOT/include/makeinclude/platform_macros.GNU
# shared_libs_only=1
コンパイルオプションに-fPICが必要なことが多い
specific(gnuace) {
compile_flags += -fPIC
}
スタティックライブラリのリンク
libpathsを探索はしないのでフルパスか相対パスで指定
pure_libs += ${STATIC_LIB_PATH}/test.a
その他
- 環境変数はmpc.plを実行したMakefile作成時の値ではなくmake実行時の値が設定される。
- C++11の場合は追加する。
compile_flags += -std=c++11
Discussion