🐕

MPCの記述例

2022/07/31に公開

はじめに

Makefileを作成してくれるMPCですが、久しぶりに使ったら忘れていて調べ直したので記述例の記録になります。

MPCは「The Makefile, Project and Workspace Creator」の略で以下を参照

https://github.com/DOCGroup/MPC

基本形

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