[ C++�ŊJ�� ]

MPC�̎g����
The Makefile, Project, and Workspace Creator


�ڎ�

MPC�Ƃ�

�@MPC�FThe Makefile, Project, and Workspace Creator�̗��B�}���`�v���b�g�t�H�[���Ή��̃v���W�F�N�g�ɂ����āA�����̃r���h�c�[���ɑΉ����邽�߂ɁA�e�r���h�c�[���ɑΉ������ݒ�t�@�C����������������c�[���ł��BMPC�p�̃v���W�F�N�g�ݒ���L�q����ƁAGNU Make�pMakefile�ABorland Make�pMakefile�Anmake�pMakefile�AMicrosoft Visual C++6.0�`8.0�̃v���W�F�N�g�t�@�C���AMicrosoft embedded Visual C++3.0/4.0�p�v���W�F�N�g�t�@�C���AGNU Automake�p�t�@�C���A�Ȃǂ̊e��r���h�c�[���p�ݒ�t�@�C���𐶐����邱�Ƃ��ł��܂��B

�@MPC���̂�Perl����ŋL�q����Ă���A���s�ɂ�Perl�����삷�邱�Ƃ��K�v�ł��BUNIX�n��OS�Ȃ�Α��Perl�����p�”\�ƂȂ��Ă��܂��BWindows�̏ꍇ�́APerl�‹��Ƃ���Cygwin��������Active Perl���C���X�g�[������̂���ʓI�ł��傤�B

�@����MPC�c�[���́AACE�ƌĂ΂����񏈗��E�v���Z�X�ԒʐM���J�v�Z�������I�u�W�F�N�g�w���l�b�g���[�N�v���O���~���O�@�\��񋟂���I�[�v���\�[�X�E�t���[�����[�N���i�̃r���h�p�Ɏg�p����Ă��܂��B

MPC�̓���ƓW�J�A�ݒ�

MPC�c�[���́AACE�����TAO�iThe ACE ORB)�̏��p�T�|�[�g���s���Ă����OCI�Ђ��J���E�����񋟂��Ă��܂��B

��L�y�[�W�̍������j���[[Download]��H��ƁAMPC�̃A�[�J�C�u���_�E�����[�h�ł��܂��B

��ZIP�`���̃A�[�J�C�u�ł�����”\�ł��B

���肵��MPC�A�[�J�C�u��W�J���܂��BMPC�Ƃ����f�B���N�g���̉��ɓW�J����܂��B�‹��ϐ�PATH�ɂ���MPC�f�B���N�g����lj����܂��B

�ȉ���2�‚̃R�}���h���g�p�ł���悤�ɂȂ�܂��B

  1. mpc.pl
  2. mwc.pl

1.�́A��{�I�ɂ͈�‚̎��s�t�@�C���܂��̓��C�u�����t�@�C�����쐬���邽�߂́u�v���W�F�N�g�v�𐶐����邽�߂̃c�[���ł��B
2.�́A���[�N�X�y�[�X�𐶐�����c�[���ł��B���[�N�X�y�[�X�́A�����́u�v���W�F�N�g�v�܂��́u���[�N�X�y�[�X�v�𑩂˂�ݒ���L�q���܂��B

MPC���g�����r���h

�P��f�B���N�g���ň�‚̎��s�t�@�C���𐶐�����

ex1�f�B���N�g����2�‚̃\�[�X�t�@�C���A1�‚̃w�b�_�t�@�C�����쐬���A����炩��1�‚̎��s�t�@�C�����r���h����ꍇ�̐ݒ�ł��B

src/
  +-- Time.h
  +-- Time.cpp
  +-- main.cpp

MPC�ݒ�t�@�C���̋L�q

MPC�̃v���W�F�N�g�ݒ�t�@�C�����L�q���܂��B

timemain.mpc
project(timemain) {
  exename = time_main
}

project�őS�̂��݂͂܂��B�v���W�F�N�g����()���ɋL�q���܂��B�v���W�F�N�g���͏ȗ��”\�ŁA���̏ꍇ��()���ȗ����܂��B�ȗ�����MPC�t�@�C��������g���q.mpc�����������O���v���W�F�N�g���ƂȂ�܂��B

�r���h������s�t�@�C�������Aexename = �Ŏw�肵�܂��B���̗�ł�time_main�����s�t�@�C�����ƂȂ�܂��B�iWindows�̏ꍇ�̊g���q.exe�͏ȗ��j

�J�����g�E�f�B���N�g���ɂ���\�[�X�t�@�C���A�w�b�_�[�t�@�C�����f�t�H���g�Ńv���W�F�N�g�Ɏ�荞�܂�܂��B

�r���h�t�@�C���̐���

��Ƃ���VC++ 7.1 (Visual Studio 2003)�̃r���h�t�@�C���𐶐����܂��B

ex1> mpc.pl -type vc71 timemain.mpc
Generating vc71 output using time.mpc
Generation Time: 0s
ex1> 

�ȉ���Visual C++ 7.1�p�v���W�F�N�g�t�@�C������������܂��B

���l�ɁA�ȉ��̎w��Ŋe��r���h�t�@�C������������܂��B

�R�}���h�I�v�V���� ���������t�@�C�� �Ώۃr���h�c�[��
mpc.pl -type nmake timemain.mpc
Makefile.timemain.mak
nmake
mpc.pl -type make timemain.mpc
Makefile.timemain
make
mpc.pl -type automake timemain.mpc
Makefile.timemain.am
automake
mpc.pl -type bmake timemain.mpc
Makefile.timemain.bmak
Borland make

��-type�Ŏw��”\�ȃI�v�V�����͌����_�ŁAautomake ,bds,bmake, cbx, em3, ghs, html, make, nmake, sle, vc6, vc7, vc71, vc8

�\�[�X�t�@�C���E�w�b�_�[�t�@�C�����w�肷��

��L�ł́Atimemain.mpc�t�@�C���Ɠ����f�B���N�g���ɂ���\�[�X�t�@�C���A�w�b�_�[�t�@�C�����v���W�F�N�g�Ɏ�荞�܂�܂����B������A�\�[�X�t�@�C���A�w�b�_�[�t�@�C�����w�肵�����ꍇ�́A�ȉ��̂悤�ɋL�q���܂��B

timemain.mpc
project(timemain) {
  exename = time_main

  Source_Files {
    Time.cpp
    main.cpp
  }

  Header_Files {
    Time.h
  }
}

Source_Files { }�̒��ɁA�r���h�Ώۂ̃\�[�X�t�@�C�����L�q���܂��B
Header_Files { }�̒��ɁA�r���h�Ώۂ̃w�b�_�[�t�@�C�����L�q���܂��B

�R���p�C���I�v�V�����̎w��

�R���p�C���I�v�V�������v���W�F�N�g�t�@�C���ɋL�q���Đ������邱�Ƃ��ł��܂��B���ӓ_�́A�R���p�C����OS�ɌŗL�Ȑݒ�Ƌ��ʂȐݒ肪����̂ŁA�������g�������邱�Ƃł��B

timemain.mpc
project(timemain) {
  exename = time_main
  includes += /lib/boost_1_34_1
  macros += _CRT_SECURE_NO_WARNINGS

  libpaths += /lib/boost_1_34_1/lib
  specific(vc9) {
    lit_libs += boost_date_time-vc90-mt
  } else {
    lit_libs += boost_date_time
  }

  Source_Files {
    Time.cpp
    main.cpp
  }

  Header_Files {
    Time.h
  }
}
includes) �R���p�C���̃C���N���[�h�p�X���`
macros) �R���p�C���̃f�t�@�C����`

libpaths) �����J�̃��C�u�����p�X���`

specific(vc)) VC++9�̂Ƃ���
lit_libs) �����N�E���C�u����

���s�t�@�C���̃f�B���N�g�����w��

�\�[�X�t�@�C���̂���f�B���N�g���Ƃ͕ʂɎ��s�t�@�C���𐶐�����f�B���N�g�����w�肷�邱�Ƃ��ł��܂��Bexeout�ɏo�͐�f�B���N�g�����L�q���܂��B

timemain.mpc
project(timemain) {
  exename = time_main
  exeout = ../bin
    :
}

�P��f�B���N�g����1�‚̃��C�u�����t�@�C���𐶐�����

ex1�f�B���N�g���ɂ���\�[�X�t�@�C���A�w�b�_�t�@�C�����쐬���A����炩��1�‚̋��L���C�u�����t�@�C�����r���h����ꍇ�̐ݒ�ł��B

timelib.mpc
project(timelib) {
  sharedname = time

  Source_Files {
    Time.cpp
  }

  Header_Files {
    Time.h
  }

}

�r���h���鋤�L���C�u�����t�@�C�������Asharedname = �Ŏw�肵�܂��B�g���q��UNIX�n�Ŏg�p����t�@�C�����擪��"lib"�͋L�q���܂���B���̗�ł́AVC++�v���W�F�N�g�t�@�C���ł�time.dll�i�܂���timed.dll�j�����L���C�u�����t�@�C�����ƂȂ�܂��Bmake�t�@�C���ł́Alibtime.so�����L���C�u�����t�@�C�����ƂȂ�܂��B

���C�u�����t�@�C���̃f�B���N�g�����w��

�\�[�X�t�@�C���̂���f�B���N�g���Ƃ͕ʂɃ��C�u�����t�@�C���𐶐�����f�B���N�g�����w�肷�邱�Ƃ��ł��܂��Blibout�ɏo�͐�f�B���N�g�����L�q���܂��B

timelib.mpc
project(timelib) {
  sharedname = time
  libout = ../lib
    :
}

mpc�t�@�C�����L�q���Ȃ��Ƃ��̃f�t�H���g����

�@������Ƃ����v���O���������ꍇ�Ampc�t�@�C���̋L�q����ʓ|�ȏꍇ������܂��B���̂Ƃ��́Ampc�t�@�C�����L�q���Ȃ��Ă��AMPC�̃f�t�H���g�̓���őΏۂ̃r���h�c�[���̃v���W�F�N�g�t�@�C���𐶐������邱�Ƃ��ł��܂��B

�@main�֐����`�����\�[�X�t�@�C�����܂܂�Ă���ꍇ�A���̃f�B���N�g���ɂ���\�[�X�t�@�C����S���R���p�C���E�����N���Ĉ�‚̎��s�t�@�C���𐶐�����v���W�F�N�g�𐶐����܂��B�v���W�F�N�g���́A���̃f�B���N�g�����Ɋ�Â��A���s�t�@�C�����́Amain�֐����`�����\�[�X�t�@�C�����Ɋ�Â��܂��B

�@main�֐����`�����\�[�X�t�@�C�����܂܂�Ă��Ȃ��ꍇ�A���̃f�B���N�g���ɂ���\�[�X�t�@�C����S���R���p�C���E�����N���Ĉ�‚̋��L���C�u�����t�@�C���𐶐�����v���W�F�N�g�𐶐����܂��B

�@�Ȃ��A�C���N���[�h�p�X�A���C�u�����p�X�A�����N���郉�C�u�������Ȃǂ́Ampc.pl�̃R�}���h���C������-value_project�I�v�V�����Ŏw��ł��܂����A�����܂ł���Ȃ�f����mpc�t�@�C�����L�q����ׂ��ł��B

�lj��̃C���N���[�h�p�X�A���C�u�����p�X�A�����N���郉�C�u�������w�肷��

�e�탉�C�u�������g�����v���W�F�N�g�̏ꍇ�A�lj��̃C���N���[�h�p�X�A���C�u�����p�X�A�����N���郉�C�u�����A�r���h�O���Ɏ��s����R�}���h�Ȃǂ��w�肷��K�v������܂��B

Boost���C�u�������g�p����ꍇ

MPC�͕W����Boost���C�u�������g�����߂̐ݒ��ێ����Ă��܂��B�������f�t�H���g�ł�Boost�̐ݒ肪�����ɂȂ��Ă���̂ŁA�����L���ɂ���K�v������܂��B�L���ɂ���ɂ͂����‚��̕��@������܂����A�����ł͂��̒�����Q�Љ�܂��B

  1. MPC���C���X�g�[�������f�B���N�g������config/global.features�̒�`��ύX����
  2. MPC�R�}���h���C���I�v�V�����œs�x�w�肷��

1.�́Aglobal.features�t�@�C���̒��Ɂuboost = 0�v�̋L�q������̂ŁA������uboost = 1�v�ɏC�����܂��B

2.�́A�R�}���h���C����-features boost=1 ���w�肵�܂��B
�@�܂��́A�uboost = 1�v���L�q�����e�L�X�g�t�@�C��(��Fmyproj.features�j���쐬���A�R�}���h���C����-feature_file myproj.features ���w�肵�܂��B

Boost���g�p����v���W�F�N�g��`�ŁAboost�̊��v���W�F�N�g���p������悤�ɋL�q���܂��B

timelib.mpc
project(timelib) : boost_base {
  sharedname = time
}

boost�̊��v���W�F�N�g�́A�����N���郉�C�u������ނɉ����ĕ����p�ӂ���Ă���̂ŁA�K�؂Ȃ��̂�I�����܂��B�������C�u�������g�p����Ƃ��́A���ꂼ��p������v���W�F�N�g�Ɏw�肵�܂��B

���v���W�F�N�g�� ���v���W�F�N�g�� ���v���W�F�N�g��
boost_base
boost_program_options
boost_test_exec_monitor
boost_date_time
boost_python
boost_thread
boost_filesystem
boost_regex
boost_unit_test_framework
boost_iostreams
boost_serialization
boost_wave
boost_prg_exec_monitor
boost_signals

�����boost�̊��v���W�F�N�g���g�p����ƁA�C���N���[�h�p�X�A���C�u�����p�X�A�����N���郉�C�u�������Ɉȉ��̊‹��ϐ����g�p����v���W�F�N�g����������܂��B

�v���W�F�N�g�����s����Ƃ��́A�����̊‹��ϐ����`���Ă����܂��B

CentOS 5�ŁAboost��yum�o�R�ŃC���X�g�[���i�܂���rpm�p�b�P�[�W���C���X�g�[���j�����ꍇ

rpm�p�b�P�[�W�ŃC���X�g�[������boost�́A/usr/include�̉���boost/������.hpp���u����A/usr/lib�̉���libboost-xxx���u����܂��B�܂��A���C�u��������libboost_regex.so�̂悤�Ƀo�[�W�����ԍ��̓t�@�C�����ɂ͕t���܂���B���������āA��L�‹��ϐ���ݒ肵�Ă��Ȃ��Ă��A�R���p�C���E�����N���ʂ��Ă��܂��܂��B

�����̃f�B���N�g���ł��ꂼ����s�t�@�C���𐶐�����

�N���C�A���g�E�T�[�o�̃v���O�������쐬����Ƃ��ȂǁA�N���C�A���g�p���s�t�@�C���A�T�[�o�p���s�t�@�C���ƕ����̎��s�t�@�C���𐶐�����ꍇ�̗�����Ă݂܂��B

�v���W�F�N�g�𑩂˂�f�B���N�g����csapp�Ƃ��āA���̃f�B���N�g���z����client�����server�f�B���N�g�����쐬���܂��B

csapp
  +--- client
  |       +--- src
  |              +--- client.cpp
  +--- server
          +--- src
                 +--- server.cpp

client��server���ꂼ��̃f�B���N�g�����Ƀv���W�F�N�g�t�@�C�����L�q���܂��B

client.mpc
project(client) {
  exename = client

  Source_Files {
    client.cpp
  }
}
server.mpc
project(server) {
  exename = server

  Source_Files {
    server.cpp
  }
}

csapp�����Ƀ��[�N�X�y�[�X�t�@�C�����L�q���܂��B

csapp.mwc
workspace {
}

UNIX��bash���GNU Makefile�𐶐�����R�}���h���s����ȉ��Ɏ����܂��B

csapp$ mwc.pl -type make -recurse csapp.mwc
Generating 'make' output using default input
Generation Time: 0s
csapp$

�����̃f�B���N�g���ł��ꂼ�ꃉ�C�u�����𐶐�����A�C���N���[�h�t�@�C�����\�[�X�Ƃ͕ʂɒu��

�����̃��C�u�����t�@�C������Ȃ�N���X���C�u�������\�z����f�B���N�g���\���̏ꍇ�̗�����Ă݂܂��B

���̗�ł̃f�B���N�g���\���z�莖���͈ȉ��̂Ƃ���ł��B

�ȉ���ABC���C�u�����̃f�B���N�g���\����MPC�̃��[�N�X�y�[�X�t�@�C���E�v���W�F�N�g�t�@�C�����L�q���܂��B

abclib
  |
  +--- include
  |       +--- abc
  |              +--- alfa
  |              +--- bravo
  |              +--- charlie
  +--- src
  |       +--- abc
  |              +--- alfa
  |              |      +--- alfa.mpc
  |              +--- bravo
  |              |      +--- bravo.mpc
  |              +--- charlie
  |                     +--- charlie.mpc
  +--- abclib.mwc
  |
  +--- lib
  |
  +--- makeinclude
           +--- abclib.mpb

makeinclude�ɂ́A�eMPC�t�@�C���ŋ��ʂ���ݒ���L�q�������ʃt�@�C����u���܂��B

alfa���C�u������MPC�t�@�C��

alfa.mpc
project(alfa) : abclib {
  sharedname = alfa

  Source_Files {
    Alfa.cpp
  }

  Header_Files {
    Alfa.h
  }
}

����alfa���C�u���������p�v���W�F�N�g�t�@�C���́Aabclib�Ƃ������v���W�F�N�g�̐ݒ���p�����܂��B

���I���L���C�u�����E�t�@�C���Ƃ���alfa�Ƃ�������Ő������܂��BUNIX�n�Ȃ�libalfa.so�ƂȂ�܂��B

���̃v���W�F�N�g���\������\�[�X�t�@�C���́AAlfa.cpp�ŁA�w�b�_�[�t�@�C����Alfa.h�ł��B
���w�b�_�[�t�@�C��Alfa.h�͕ʃf�B���N�g���ɂ���̂ŁA���̃t�@�C�����݂̂̋L�q�ł悢�̂��ǂ����͗v�����B

���C�u�������ʂ�MPC�x�[�X�t�@�C��

abclib.mpb
project {
  includes += $(ABCLIB_ROOT)/include
  libout = $(ABCLIB_ROOT)/lib

  specific(make) {
    compile_flags += -Wall
  }
}

���J�w�b�_�[�t�@�C���̓\�[�X�Ƃ͕ʃf�B���N�g���ɒu�����߁A�R���p�C�����ɂ̓C���N���[�h�p�X�̎w�肪�K�v�ł��B���̃C���N���[�h�p�X�̓v���W�F�N�g�ŋ��ʂȂ̂ŁA�e�v���W�F�N�g�t�@�C���ɃR�s�[���y�[�X�g������͋��ʃt�@�C���Ɉꌳ�����ׂ��ł��B

���l�Ƀ��C�u�����p�X�����ʂł��B

�܂��A�R���p�C���I�v�V�����ŋ��ʂ�����̂������ɋL�ڂ��܂��B

���[�N�X�y�[�X�t�@�C��

abclib.mwc
workspace {
}

Makefile�̐���

UNIX��bash���GNU Makefile�𐶐�����R�}���h���s����ȉ��Ɏ����܂��B

abclib$ mwc.pl -type make -include ./makeinclude abclib.mwc
Generating 'make' output using abclib.mwc
Generation Time: 0s
abclib$

-type�I�v�V������make�A���Ȃ킿GNUmake�pMakefile�𐶐����܂��B

�empc�t�@�C���܂��͋��ʂ�mpb�t�@�C���ɁA�v���W�F�N�g�g�b�v�f�B���N�g����\��ABCLIB_ROOT�ϐ����g�p����include�f�B���N�g�������w�肵�Ă��܂��B-relative�I�v�V�������w�肵�Ȃ���΁A���̕ϐ��͂��̂܂ܐ��������Makefile���̃v���W�F�N�g�t�@�C���ɕϐ��̂܂ܔ��f����܂��B���̂��߁A�r���h���s���ɂ��̊‹��ϐ����Z�b�g����K�v������܂��B

Makefile.alfa�i�����j
CPPFLAGS = $(PICFLAGS) $(GENFLAGS) -Wall -D_REENTRANT -I"$(ABCLIB_ROOT)/include"

����A-relative�I�v�V�����ŕϐ��̓��e���w�肵�Ă����ƁA���̕ϐ���Makefile���̃v���W�F�N�g�t�@�C���ł͑��΃f�B���N�g���ɓW�J����܂��B

abclib$ mwc.pl -type make -include ./makeinclude -relative ABCLIB_ROOT=. abclib.mwc
Generating 'make' output using abclib.mwc
Generation Time: 0s
abclib$
Makefile.alfa�i�����j
CPPFLAGS = $(PICFLAGS) $(GENFLAGS) -Wall -D_REENTRANT -I"../../../include"

�J�X�^���R�}���h�̒�`

CORBA��IDL�R���p�C����AQt��MOC�R���p�C���ȂǁA����̃c�[���ŗL�̃R�}���h�����s����J�X�^���R�}���h���`���܂��B

Define_Custom�����g���āAMPC�̃v���W�F�N�g�t�@�C�����ɒ�`���܂��B

ACE/TAO�̏ꍇ�AMPC���W���őg�ݍ��܂�Ă���̂ŁAACE/TAO��MPC���g���ƃ��[�U���ŃJ�X�^���R�}���h���`�����ɍς݂܂��B�������AMPC��ʂɃC���X�g�[�����Ă�����AACE/TAO�̃p�b�P�[�W�ł��g�p����MPC���܂܂�Ă��Ȃ������肵���ꍇ�A���O��IDL�R���p�C���̃J�X�^���R�}���h���`������@��m���Ă���ƑΏ����e�Ղł��B

IDL�R���p�C��

TAO IDL�R���p�C���̃J�X�^���R�}���h��`

    Define_Custom(IDL) {
        automatic = 1
        command = tao_idl
        inputext = .idl

        source_pre_extension = C, S
        header_pre_extension = C, S
        inline_pre_extension = C, S
        source_outputext = .cpp, .cxx, .cc, .C
        header_outputext = .h, .hpp, .hxx, .hh
        inline_outputext = .inl
        keyword idlflags = commandflags
    }
IDL_Files�̃J�X�^���R�}���h��`�B
automatic=1�w��ŁAIDL_Files�Ŏw�肵���t�@�C������̐������́A�����I��Source_Files, Header_Files, Template_Files�Ȃǂɒlj�����B
�J�X�^���R�}���h��tao_idl�B
�Ώۓ��̓t�@�C���̊g���q��.idl�B

�����\�[�X�t�@�C���̊g���q���O�ɂ�C�����S���t��
�����w�b�_�t�@�C���̊g���q���O�ɂ�C�����S���t��
�����C�����C���t�@�C���̊g���q���O�ɂ�C�����S���t��
�����\�[�X�t�@���̊g���q
�����w�b�_�t�@�C���̊g���q
�����C�����C���t�@�C���̊g���q
IDL�J�X�^���R�}���h�̃R�}���h�I�v�V�����́Aidlflags�Ŏw��”\�Ƃ���B

tao_idl�̐������ɍ��킹�āAsource_pre_extension�����w�肵�Ă��܂��B���̖��O�̃��[����Makefile���o�͂���܂��B

���L�j���ۂ�ACE/TAO�Ɋ܂܂��J�X�^����`�͂����ƕ��G�ɂȂ��Ă��܂��B

���p��

�ډ��

workspace�̋L�q���@

������

MPC���g���ɂ������ďo���킵�����Ƃ��̉����ɂ‚��Ẵ����ł��B

Windows OS / Cygwin

Cygwin g++��make����-ldl�����‚���Ȃ������N�G���[

Cygwin�‹��ł́A���C�u����libdl������܂���BCygwin�ł́Alibdl���񋟂���֐���libcygwin�Ɋ܂܂�Ă���̂ŁA/usr/lib/libcygwin.a�ɃV���{���b�N�����N���쐬������@�ʼn�����܂��B

$ cd /usr/lib
$ ln -s libcygwin.a libdl.a
$ 

Windows OS / VC++

VC++�Ńf�o�b�O�p�^�����[�X�p�����N�t�@�C������؂�ւ�����

Linux / GCC

�f�o�b�O�r���h�E�����[�X�r���h�̐؂�ւ���������

VC++�ł́A�v���W�F�N�g�ݒ�Ɂu�f�o�b�O�r���h�v�A�u�����[�X�r���h�v�̍\������`����A�r���h���ɂǂ���Ńr���h���邩��I�����邱�Ƃ��ł��܂��B

����Amake�iMakefile�j�v���W�F�N�g�ł́A�f�t�H���g�ł͍œK���I�v�V����"-O"���w�肳��A�f�o�b�O�I�v�V����"-g"�͎w�肳��܂���B

���������Makefile.xxx �̒��ňȉ��̕ϐ��ŃI�v�V��������`����܂��B

Makefile.xxx
LIBSUFFIX     =
GENFLAGS      = -O

���̐ݒ�́AMPC��make�p�e���v���[�g�ݒ�t�@�C���ɒ�`����Ă�����̂ł��B

makedll.mpt
...
configurations = Release
...
Debug {
  lib_modifier = d
  genflags = -g
}
Release {
  optimize = 1
  genflags = -O
}

Makefile�𐶐����錳�l�^��`�ł���configurations������Release�ɐݒ肳��Ă���̂ŁA���������Makefile��Release�Œ�`����Ă���genflags�̒l���K�p����܂��B

MPC���s���ɁA�f�o�b�O�r���h�pMakefile�������[�X�r���h�pMakefile�ǂ���𐶐����邩���w�肷��

mwc.pl�R�}���h�����s����Ƃ��ɁA-value_template�I�v�V�������w�肵�āAconfigurations�������㏑������

$ mwc.pl -type make -value_template configurations=Debug ...
$ 

���������Makefile.xxx�͈ȉ��ɂȂ�܂��i�����j�B

Makefile.xxx
LIBSUFFIX     = d
GENFLAGS      = -g
MPC���s���ɁA�f�o�b�O�r���h�^�����[�X�r���h���pMakefile�𐶐����Amake���s���ɂǂ���Ńr���h���邩���w�肷��

�f�o�b�O�r���h�ƃ����[�X�r���h�ƕp�ɂɎg��������ꍇ�A�s�xMPC��Makefile�𐶐��������͎̂�Ԃł��B�����ŁAMakefile�ɂ̓f�o�b�O�r���h�A�����[�X�r���h�o���̐ݒ�𐶐����āAmake�����s����Ƃ��Ƀf�o�b�O�r���h�������[�X�r���h�����w��ł���悤�ɂ��܂��B

$ mwc.pl -type make -value_template "configurations=Debug Release" ...
$ 

���������Makefile.xxx�͈ȉ��ɂȂ�܂��i�����j�Bmake�}�N���ϐ�CFG�̒l�ɉ����āA�f�o�b�O�r���h�������[�X�r���h����؂�ւ�����悤�ɂȂ��Ă��܂��B

Makefile.xxx
CFG = Debug
ifeq ($(CFG), Debug)
...
LIBSUFFIX     = d
GENFLAGS      = -g
...
endif
ifeq ($(CFG), Release)
...
LIBSUFFIX     = 
GENFLAGS      = -O
...
endif
$ make 
// Debug�r���h���s����
$ make CFG=Debug
// Debug�r���h���s����
$ make CFG=Release
// �����[�X�r���h���s����

��L�ł́A�f�t�H���g�iCFG�ϐ����w�肵�Ȃ��ꍇ�j�ł̓f�o�b�O�r���h�ł����A�f�t�H���g�Ń����[�X�r���h�ɂ������ꍇ�́AMPC��-value_template�I�v�V������configurations=�̌�̕��т�ς��āA�f�t�H���g�ɂ������\�����ɏ����܂��B

$ mwc.pl -type make -value_template "configurations=Release Debug" ...
$ 
Makefile.xxx
CFG = Release
ifeq ($(CFG), Release)
...
endif
ifeq ($(CFG), Debug)
...
endif
�f�o�b�O�r���h�^�����[�X�r���h�Ő������郉�C�u�����t�@�C���́A�t�@�C�����͓���ŏo�͐�f�B���N�g���𕪂�����

MPC���p�ӂ���GNU make�p��Makefile�ݒ�́A�f�o�b�O�r���h�������C�u�����́A�t�@�C������'d'���t���܂��B�i��Flibfoo.so�������[�X�r���h�ł���΁A���̃f�o�b�O�r���h��libfood.so�ƂȂ�j
������A�t�@�C�����͕ς������Ȃ��ꍇ�A�o�͐�f�B���N�g����ς��邱�ƂőΉ��ł�����@���l���Ă݂܂��B

�܂��Amakedll.mpt ���J�X�^�}�C�Y���܂��B

make2dll.mpt
...
configurations = Release Debug
...
Debug {
  output_dir_ext = _debug
  genflags = -g
}
Release {
  output_dir_ext = _opt
  optimize = 1
  genflags = -O
}

���ɁAmake.mpd���J�X�^�}�C�Y���܂��B

make2l.mpd
...
SHTARGETDIR   = <%if(dllout)%><%dllout%><%output_dir_ext%><%else%><%libout%><%output_dir_ext%>
<%endif%><%slash%><%targetoutdir%>

���̂Q�‚̃J�X�^�}�C�Y�����t�@�C����ǂݍ��܂��Amwc�����s���܂��B

$ mwc.pl -type make -template make2 -ti dll:make2dll -value_template \
 "configurations=Release Debug" ...

�����N�I�v�V�������w�肵����

�����N�I�v�V�����́Amake�̏ꍇ�A���������Makefile�̒���LDFLAGS=�Őݒ肳��܂��B�ʏ�̓����N���郉�C�u�����̃p�X�ƃ��C�u�����������f����܂����A���ɂ������N���Ɏw�肵�����I�v�V�������������ꍇ�A�����ɔ��f���邽�߁Alinkflags���w�肵�܂��B

MPC�t�@�C���̋L�q
project {
  specific(make) {
    linkflags += -pg
  }
  ...
}
linkflags�����f�����d�g��

Makefile�𐶐����邽�߂̐��`�ƂȂ�make.mpd�̒��ɁAlinkflags����`����Ă���Ύw�肷��悤�ɂȂ��Ă��܂��B

MPC/templates/make.mpd����
LDFLAGS =<%if(libpaths)%>...����...<%if(linkflags)%> <%linkflags%><%endif%>...�㗪

make�̐����Ɋւ���ݒ肪�����ꂽmakedll.mpt�ɂ́A�R���p�C����ނɂ���ăf�t�H���g��linkflags����`����Ă��܂��B

MPC/templates/makedll.mpt����
...
SunCC {
    linkflags = -library=Cstd -library=Crun
    ...
}
acc {
    linkflags = -Wl,+s
    ...
}

Linux�ł�GCC�̏ꍇ�Alinkflags�͐ݒ肳��Ă��܂���B

Emacs��flymake�Ή��^�[�Q�b�g��Makefile�ɒlj�������

Emacs��flymake���[�h��L���ɂ��Ă���Ƃ��AEmacs�̓\�[�X�t�@�C�����J�����ꏊ��make��check-syntax�^�[�Q�b�g�Ŏ��s���A�G���[�`�F�b�N���s���܂��B�����ŁAMPC�Ő�������Makefile��check-syntax�^�[�Q�b�g��lj�������@��T���܂����B

��q�̕ύX�Ή��Ŏ����ł��܂����B

�‹��ϐ�CUSTOM_TARGETS�̒�`
$ export CUSTOM_TARGETS=check-syntax
$ 
make.mpd�̏C��
$(MPC_ROOT)/templates/make.mpd
--- make.mpd.orig       2008-11-16 22:19:39.000000000 +0900
+++ make.mpd    2009-02-24 00:14:59.000000000 +0900
@@ -301,6 +301,9 @@
        -$(RM) <%targetoutdir%><%obj_dir%>
 <%endif%>
 
+check-syntax:
+       $(COMPILE.cc) $(EXPORTFLAGS) -Wall -Wextra -pedantic -fsyntax-only ${CHK_SOURCES}
+
 <%if(prebuild)%>
 __prebuild__:
        @<%eval(prebuild)%>

Makefile.xxx �̓e���v���[�g�t�@�C��make.mpd�����`���`���Ă���̂ŁA����Ƀ^�[�Q�b�g��lj����܂��B

�i�I�v�V�����j�‹��ϐ��ł͂Ȃ��A�P�v�I��check-syntax��L���ɂ��邽�߁AMakeWorkspaceCreator.pm���C������

�‹��ϐ�CUSTOM_TARGETS�w��͖Y��Ă��܂���flymake�������ɂȂ�̂��ʓ|�Ȃ̂ŁAMPC�̒񋟃t�@�C�����̂��C�����Ă��܂��܂��B

$(MPC_ROOT)/modules/MakeWorkspaceCreator.pm
--- MakeWorkspaceCreator.pm.orig        2008-11-16 22:19:39.000000000 +0900
+++ MakeWorkspaceCreator.pm     2009-02-24 00:04:56.000000000 +0900
@@ -23,7 +23,7 @@
 # Data Section
 # ************************************************************
 
-my($targets) = 'clean depend generated realclean $(CUSTOM_TARGETS)';
+my($targets) = 'clean depend generated realclean check-syntax $(CUSTOM_TARGETS)';

Makefile�̓e���v���[�g�t�@�C���͂Ȃ��APerl�X�N���v�g��MakeWorkspaceCreator.pm�����ڐ������Ă���̂ŁAPerl�X�N���v�g���C�����܂��B

����

�R�}���h���C���I�v�V�����w����ȗ�������

���[�N�X�y�[�X�t�@�C���i.mwc�j�ɃR�}���h���C���I�v�V�������L�q����

���̋L�q�́AMPC��FAQ�ɋL�ڂ���Ă�����̂ł����AMPC 3.6.0�Ŋm�F�����Ƃ���A�ȉ����L�q���Ă��L���ɂȂ�܂���B

abclib.mwc
workspace {
    cmdline += -value_template "configurations=Release Debug" -include $(HOME)/MPC
}
MPC�ݒ�t�@�C���ɋL�q����

MPC�͐ݒ�t�@�C����ǂݍ��݂܂��B�f�t�H���g�ł́AMPC�̃f�B���N�g���ɂ���ݒ�t�@�C����ǂݍ��݂܂����A�v���W�F�N�g�ŗL�̐ݒ�t�@�C����ǂݍ��ނ悤�ɐݒ肵�Ă������ƂŁA�v���W�F�N�g�ŗL�̎w����s���܂��B

(1) $MPC_ROOT/config/base.cfg�t�@�C����V�K�ɍ쐬���A�ȉ����e���L�q����

$PROJECT_ROOT=$PROJECT_ROOT/MPC/config

(2) �v���W�F�N�g�̃f�B���N�g�����‹��ϐ�PROJECT_ROOT�ɐݒ肷��

(3) $PROJECT_ROOT/MPC/config �f�B���N�g����MPC.cfg�t�@�C�����쐬����

�����ŁA�‹��ϐ�PROJECT_ROOT�͖��O�͕ʂɉ��ł��\���܂���B

MPC.cfg�̏�����

default_type = make     // �R�}���h���C���� -type make ���w��

�w��ł���ݒ�́A�ȉ�

command_line
default_type
dynamic_types
includes
logging
main_functions
verbose_ordering

�ڂ����́AMPC�̃h�L�������g�Q��

�\�[�X�t�@�C�����ɃR���p�C���I�v�V������ς�����

Source_Files {} �𕡐���`���āASource_Files����buildflags�ŌŗL�ɃR���p�C���I�v�V�������w�肵�܂��B

alfa.mpc
project(alfa) : abclib {
  sharedname = alfa

  Source_Files {
    buildflags += -finstrument-functions
    AlfaX.cpp
  }

  Source_Files {
    AlfaY.cpp
    AlfaZ.cpp
  }
}

�������C�u�������r���h����ہA�r���h���Ԃňˑ����郉�C�u��������̂��߃����N�G���[�ƂȂ�

�����̃v���W�F�N�g�����e���郏�[�N�X�y�[�X���\�z����ہA�v���W�F�N�g�̃r���h���Ԃ�MPC�����ˑ��i�A���t�@�x�b�g���ɂ݂���j�ł��B�����ŁA���C�u�������\�z����v���W�F�N�g�t�@�C���i*.mpc�j�ɁA�ˑ�����v���W�F�N�g����after += �ŋL�q���܂��B

bravo.mpc
project(bravo) : abclib {
  sharedname = bravo
  libs += alfa
  after += alfa

  Source_Files {
    BravoFoo.cpp
    BravoBar.cpp
  }
}

�f�o�b�O�r���h������ƁA���C�u���������ς�邽�߁A�����N�G���[�ɂȂ��Ă��܂�

���C�u���� alfa �������N����悤�Ɏw�肷��ƁA�f�o�b�O�r���h���s���� alfad �Ɩ�����'d'�t�����C�u�����������N���悤�Ƃ��ăt�@�C�������‚��炸�����N�G���[�ƂȂ�܂��B�܂��A�f�o�b�O�r���h�̏ꍇ�A�����̃��C�u��������sharedname=bravo�Ǝw�肵�Ă��Ă��f�o�b�O�r���h�ł́Abravod�Ɩ�����'d'���t�������O�ɂȂ��Ă��܂��B

����́A�����f�B���N�g���ɈقȂ�r���h�I�v�V�����Ő����������C�u���������������邽�߁A����ѓ����r���h�I�v�V�����Ő����������C�u�������m�������N���邽�߂̋@�\�ł��B����Windows VC++�ł́A�f�o�b�O�ƃ����[�X�Ō݊����̂Ȃ����C�u�������ł���̂Łinew��delete���u����������̂͗L���Șb�j�A���̋@�\���K�v�ɂȂ��Ă��܂��B

bravo.mpc
project(bravo) : abclib {
  sharedname = bravo
  libs += alfa
  ...
}
�f�o�b�O�r���h�A�����[�X�r���h�Ɋւ�炸�A�����N���郉�C�u�����t�@�C�����͓����ɂ�����

�O���̃��C�u�����́A�f�o�b�O�r���h�ł��񋟂���Ă��Ȃ����Ƃ��悭����܂��B���̏ꍇ�́A�����N�w���libs�ł͂Ȃ��Alit_libs�Ŏw�肵�܂��B

bravo.mpc
project(bravo) : abclib {
  sharedname = bravo
  lit_libs += alfa
  ...
}
�f�o�b�O�r���h�A�����[�X�r���h�Ɋւ�炸�A�������郉�C�u�����t�@�C�����͓����ɂ�����

mwc.pl/mpc.pl�̃R�}���h���C���I�v�V����-value_template�ŁAlib_modifier�������u�����N�ɐݒ肵�܂��B

$ mwc.pl -type make -value_template lib_modifier= ...
$ 

�f�o�b�O�r���h�w��ƂƂ��Ɏg���Ƃ��́A

$ mwc.pl -type make -value_template configurations=Debug -value_template lib_modifier= ...
$ 

�̂悤�ɕ�����-value_template�I�v�V�������w�肵�܂��B

���O�f�B���N�g���̎w��

����̃f�B���N�g�������O�������ꍇ�́A

�R�}���h���C���I�v�V�����Ŏw�肷��

mwc.pl��-exclude�I�v�V�����ŁA���O�������f�B���N�g���܂���mpc�t�@�C�������w�肵�܂��B�������O����Ƃ��̓J���}�ŋ�؂��ė񋓂��܂��B

abclib.mwc
workspace {
}